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.
This is what I am struggling with. Channels are created here, and a channel is created in `client/lib/app-start.js`. I'd like to consolidate. This is why I originally went with the factory, to keep the decision in one place. 

I'm not sold on adding `flow` on `this._oauthParams` to create the channel because Channels are used outside of the OAuth flow when we instantiate the FxDesktopChannel. It's better than any idea that I have at the moment though.

The other thing I'd like to clean up is OAuth parameters are plucked from the URL in both service-mixin.js and app-start.js.

Another oddity is we use pluck both `redirectTo` and `redirect_uri` from the search parameters. Conceptually, what is the difference? Is `redirectTo` used by the Desktop Sync flow?