Add HeadlessTabSocket

This lets a C++ embedder send messages to and from JS on a HeadlessWebContents.
Note for this to work the headless browser context must have been created with
AddTabSocketMojoBindings and the headless web contents must have been created
with CreateTabSocket(true).

This will not affect chrome.exe --headless because only a C++ embedder can set
the above options.

Note that C++ embedders can already do this and more with the current headless API.
At a later date we will remove the more general headless mojo interface in favor of
TabSockets, unless it turns out somebody is actually using them.

BUG=546953

Review-Url: https://codereview.chromium.org/2813953002
Cr-Commit-Position: refs/heads/master@{#464327}
16 files changed