Reland "Parse HID report descriptor for report info"

This is a reland of 6a235ad71f5f34c4b43a5c6be4a78c96cb748921

This reland includes a fix for a use-before-initialization
error in HidReportDescriptor that caused devices that do not
use report IDs to sometimes report that they did.

Original change's description:
> Parse HID report descriptor for report info
>
> The previous HID report descriptor parser was designed to only
> extract the maximum size of each type of report and did not preserve
> information about the individual fields within a report. This CL
> adds a new parser that builds a hierarchical representation of the
> reports supported by the HID device.
>
> BUG=890096
>
> Change-Id: I4ac3bf883a843bec00576bfad78958d42f53abc7
> Reviewed-on: https://chromium-review.googlesource.com/c/1257897
> Commit-Queue: Matt Reynolds <mattreynolds@chromium.org>
> Reviewed-by: Daniel Cheng <dcheng@chromium.org>
> Reviewed-by: Ovidio de Jesús Ruiz-Henríquez <odejesush@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#626816}

BUG=890096

Change-Id: I8991162f0bb8c442d4e7cdce5940dd801ab5bfa0
Reviewed-on: https://chromium-review.googlesource.com/c/1446661
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Commit-Queue: Matt Reynolds <mattreynolds@chromium.org>
Cr-Commit-Position: refs/heads/master@{#628478}
17 files changed