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.
What information will use to determine what kind of a channel to create? I propose that when we setup `this._oauthParams`, we create some notion of a `flow` which could be one of `redirect`, `iframe`, or `browser`. I'm not sure what basis we'd use to determine this yet, but the default could be `redirect`, if we have `webChannelId` it could be `browser`, and if we're on the magical path prefix, then it could be `iframe`.