Generalize and refactor DeviceSensorEvent* architecture to support
multi-event type targets.

This patch performs a significant refactoring of the
DeviceSensorEvent{Controller,Dispatcher} and related classes.
It provides new Base classes to allow simple implementation of
APIs involving multi-event type non-window targets (e.g. Battery
Status API). Additionally it makes the implementation of existing
event-based APIs (device_orientation, device_light) simpler and
more compact.

In particular the following new classes have been added:
* DeviceEventControllerBase and DeviceEventDispatcherBase
(derived from by the Battery Status API).
* DeviceSingleWindowEventController is more specific and
contains functionality necessary for single-event type window
target APIs (used by Device Motion/Orientation and Device Light
APIs).

BUG=122593, 360068

Committed: https://src.chromium.org/viewvc/blink?view=rev&revision=175661

Committed: https://src.chromium.org/viewvc/blink?view=rev&revision=175686

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

git-svn-id: svn://svn.chromium.org/blink/trunk@175792 bbb929c8-8fbe-4397-9dbb-9b2b20218538