Prepare for multiple oauth channels

@vladikoff, @zaach, @ckarlof:

I closed #1423 in favor of this slimmed down version. In this version, I use @vladikoff's original PR as a basis, but remove the FxWebChannel to simplify the initial review. Once this portion is complete, I'll open a new PR with the FxWebChannel.

Here is the commit log as a preview:

> Prepare the OAuth completion logic for multiple channels.
>
> * Remove the @vladikoff's FxWebChannel for now to simplify review. I will add this in a separate PR.
> * Create a BaseChannel which is the channel interface, base other Channels off of this.
> * Extract the current OAuth redirect code into its own channel named RedirectChannel.
> * Add helper functions to service-mixin.js to clarify intentions.
> * Upon OAuth completion, display a spinner on the available submit button.
> * Upon OAuth completion, if no response is received from the channel within 10 seconds, display an error message.

Note, the channelFactory is out.

Second note: This PR is compatible with @seanmonstar's OAuth capable 123done.
> Calling it a RedirectChannel seems like an abuse of the abstraction here, but I could be convinced otherwise. 

The goal is to have a single interface that all communication can pass through. Passing data via the URL is one concrete implementation of the interface.

> I'm more open to this abstraction, but if you want to do it this way, the way I think it should work is you send an "oauth_complete" message into the RedirectChannel (like the others) and its implementation catches that and does the window.location navigation.

Originally I had everything go through `send` and had a whitelist of events that the RedirectChannel know how to handle. If it received `oauth_complete`, it took the data and created a redirect URL. It ignored the `signin` message.