[extension SW] Support lazy events from extension service workers.

This CL adds support to register and dispatch lazy events from/to
extension SW
(a) To register, we use SW's (unique) scope url to identify a SW
within an extension. Pass the information about scope url through
ServiceWorkerContextClient. Initially EventListener::worker_thread_id_
was used to identify whether an event is for SW context or not.
However, that is not enough for lazy service worker events, because
we need to persist lazy events in the browser process and
worker_thread_id_ is temporary for a running SW.
Change SW EventListener by adding EventListener::is_for_service_worker()
to support this.
(b) To dispatch, we need to start a worker before dispatching the
event. The content/ API:
ServiceWorkerContext::GetWorkerInfoAfterStartWorker()
was added to do that. Add ServiceWorkerTaskQueue (similar to
LazyBackgroundTaskQueue for lazy background pages) to dispatch
the event (a task) in extensions/ layer.

IPC changes:
In order to identify a (possibly stopped) SW, IPCs for lazy
service worker events were changed to accept service worker scope
urls. In order to not convolute existing lazy background page IPCs
(ExtensionHostMsg_Add/RemoveLazyListener), new ones have been
introduced: ExtensionHostMsg_Add/RemoveLazyServiceWorkerListener.

Other notable changes:
- LazyContextTaskQueue is introduced to express a lazy runnable
  context. Make the new ServiceWorkerTaskQueue and existing
  LazyBackgroundTaskQueue derived from that. One can post [1]
  PendingTasks to these contexts. Unfortunately becuase of many
  existing usages of LazyBackgroundTaskQueue::AddPendingTask,
  [1] was named AddPendingTaskToDispatchEvent to avoid collision.
- LazyContextTaskQueue provides a contexual information expressed
  as LazyContextTaskQueue::ContextInfo. This was introduced to
  avoid ExtensionHost from LazyContextTaskQueue (See
  LazyBackgroundTaskQueue::AddPendingTask)

BUG=721147
Test=After an extension service worker stops, it should still be
possible to dispatch extension events to it. That will wake up
the service worker.

Review-Url: https://codereview.chromium.org/2943583002
Cr-Commit-Position: refs/heads/master@{#483820}
41 files changed