Hold a wake lock while running scheduled tasks
This branch acquires a wake lock when checking for scheduled tasks for run, and holds it until the tasks have run. The TaskScheduler rather than the caller becomes responsible for submitting tasks to the executors on which they run. This allows the scheduler to manage the wake lock on the caller's behalf.
The wake lock factory becomes a wake lock manager, with a couple of helper methods for doing work while holding wake locks.
The branch also adds a tag to AndroidWakeLock, which is used for logging. The tag of the underlying OS wake lock is unaffected.
Third part of #1142 (closed)