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.
New channels like the FxWebChannel and the IFrameChannel will be plugged in here.