Mojo Channel: Fix deferred proxy dispatch; support paused channels

This is a twofold change because of some inherent overlap:

 1. Fixes deferred proxy dispatch. This means if a message comes in
    for an unknown associated interface endpoint, we still dispatch
    to the proxy thread, as was the intended behavior. Adds a test
    to verify that this actually works now.

 2. Adds the ability to create a "paused" Channel, and corresponding
    Unpause and Flush operations (which only ChannelMojo supports).
    This is used by a follow-up CL to avoid having
    RenderProcessHostImpl perform its own message queueing, which it
    does to allow certain initialization messages to preempt other
    early Sends.

RPHI must not perform its own queueing once the Channel exists:
interface requests and mojom messages must also be queued, but RPHI
only hooks into the IPC::Sender interface. Queueing outside of the
Channel breaks FIFO between early IPC::Messages and early Channel-
associated Mojo IPC.

In order to support both of these changes, the manual serialization
gunk has also been removed from MessagePipeReader (it was only there
to support thread-safe Send, which we've since abandoned.) This is
necessary to ensure that all send logic goes through the same single
queueing mechanism in the ChannelAssociatedGroupController.

Part a series of CLs to enable and demonstrate WebContents associated
interfaces:

  1. This CL
  2. https://codereview.chromium.org/2309513002
  3. https://codereview.chromium.org/2310563002
  4. https://codereview.chromium.org/2310583002

BUG=612500

Review-Url: https://codereview.chromium.org/2301123004
Cr-Commit-Position: refs/heads/master@{#416678}
14 files changed