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.
@ckarlof - In #1453, I try to avoid adding new endpoints and use the same `/oauth/*` endpoints that are currently used. Framing is allowed on the `/oauth/signin` and `/oauth/signup` endpoints only, and at browser startup I detect if the page is viewed from within an iframe. If it is, I do a ping/ack from the iframe to the parent to fetch the origin of the parent and compare the origin against a whitelist. Are extra endpoints needed to handle the iframe case?