Refactoring gamepad polling to support dynamically added sources

Also reduces duplicate code between platform data fetchers by having things like
sanitation happen in the provider, and makes the data fetchers themselves more
modular.

BUG=577414

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

Cr-Commit-Position: refs/heads/master@{#371083}
24 files changed