Reland of Parse USB interface association descriptors. (patchset #1 id:1 of https://codereview.chromium.org/1697863003/ )

Reason for revert:
Relanding this with a new implementation and fixed the test bug that led this issue to not be caught in the first place.

Original issue's description:
> Revert of Parse USB interface association descriptors. (patchset #3 id:100001 of https://codereview.chromium.org/1568673002/ )
>
> Reason for revert:
> http://crbug.com/586824
>
> Makes Chrome hang when using USB devices.
>
> Original issue's description:
> > Parse USB interface association descriptors.
> >
> > USB interface association descriptors are used to combine multiple
> > interfaces into a single functional group. This patch adds support for
> > parsing them out of the |extra_data| field left by libusb's parsing of
> > configuration, interface and endpoint descriptors. The resulting
> > association is then represented by setting the |first_interface| field
> > of each interface in a function to the |interface_number| of the first
> > interface in the function.
> >
> > WebUSB will use these associations to set permissions for an entire
> > function with a single descriptor.

BUG=492204, 586824

Review URL: https://codereview.chromium.org/1707453002

Cr-Commit-Position: refs/heads/master@{#383543}
4 files changed