Fetch USB device strings asynchronously to avoid libusb race conditions.
libusb offers both synchronous and asynchronous APIs however it is
dangerous to mix them as this can result in races between the thread
running the libusb I/O loop and the thread making the synchronous
request. This patch ditches calls to libusb_get_string_descriptor for a
brand new asynchronous path using the existing I/O methods available in
UsbDeviceHandle.
BUG=439594
Review URL: https://codereview.chromium.org/
1181773004
Cr-Commit-Position: refs/heads/master@{#334466}