refactor(client): Extract channel creation logic, rename channels, and simplify the Oauth completion logic.

* Extract all channel creation logic into lib/channels/factory.js
* Rename the WebChannel to CustonEventsChannel
* Slightly simplify the OAuth completion logic.
* Simplify service-mixin by checking whether a channel has a completeOAuth function. If it does, the channel knows what to do with the OAuth result and can complete the transaction. If the function returns a promise, it is asynchronous.
* Add completeOAuth to the CustomEvents channel.
* Create a 'web' channel that redirects after oauth completion.