Download Service : Queue task requests if service isn't ready

This CL adds queuing capability to the download service.
DownloadServiceImpl would queue all the requests such as StartDownload,
Pause/Resume/CancelDownload requests from the client as well as
OnStartScheduledTask calls from the system. After the controller is
ready, the service will execute the tasks in the same order as received.
If init failed, it will drop all the client requests, but will let the
scheduled tasks run which will be handled in the Controller
appropriately i.e. the finished callback will be invoked to notify the
OS of completion/rescheduling of the task.

This CL also ensures that the task finished callbacks will be invoked
only after the task to run is complete.

BUG=736229

Change-Id: I139ab0e0345be49c5e0351eb7d0533767ad8ff65
Reviewed-on: https://chromium-review.googlesource.com/550516
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: David Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#486615}
13 files changed