Implement tab (content script) to Service Worker extension messaging.

This is the first step towards implementation of Extension messaging
in Extension Service Workers. The CL implements chrome.test.sendMessage
from a tab (content script) to a Service Worker running as extension
background. Replying to the message through callback isn't implemented
in this CL.

The basic changes in this CL are:
- Make the messaging bindings available in the service workers'
  script context: runtime.sendMessage and runtime.onMessage.
- Handle IPCs to open/close a port for workers as well.
- Handle these IPCs in the browser process in the existing
  MessagingService class, expand ExtensionMessagePort to support
  workers along with RenderFrames/tabs.
- Both JS and native bindings work.
- Future CLs can expand on this base CL to support other messaging
  source and destinations as the implementation is meant to
  move the code towards generic support of messaging endpoints
  (worker or RenderFrame).

Some more detailed implementation notes:
- ExtensionMessagePort can track and target workers along with
  existing RenderFrames/tabs support. Handle the IPCs sent by it on
  worker thread (WorkerThreadDispatcher), these IPCs are:
    * ExtensionMsg_ValidateMessagePort
    * ExtnesionMsg_DispatchOnConnect
    * ExtensionMsg_DippatchOnDisconnect
    * ExtensionMsg_DeliverMessage
- MessageService can now work with Service Workers, similar to how
  they used to work with event pages.
- Introduce a generic ScriptContextSetIterator class in the
  renderer to apply IPCs to a set of ScriptContexts. Expand that
  to cover WorkerScriptContextSets as well as non-worker
  ScriptContextSets. Messaging IPCs targeted to workers now
  get dispatched to WorkerScriptContextSets. An unfortunate
  consequence of generalizing this to worker is Dispatcher provides
  a non-const ptr getter to ScriptContextSets
  (script_context_set_iterator) as worker script context sets require
  tls lookup.

Add an end-to-end test for the feature.

Bug: 925927
Change-Id: I8f77e6d63318925b85dc5707f9367e904bde634c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1441274
Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org>
Reviewed-by: Devlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#638277}
32 files changed