Prepare for multiple 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.
> In terms of the WebChannel, I think it should be possible to create several WebChannels in a single mixin if required.

I'm not very knowledgeable about the WebChannel requirements, can you fill me in, esp the reqs for multiple channels?

What I do know is that it makes me cringe that we have logic to create channels in several places, at different points in the flow, with no knowledge of each other. In one place, the channel is stored on the Session, the other it's not. My brain capacity is limited and I find this confusing and difficult to reason about.