Small refactor.
Another refactor.

canConnect and canSubscribe should throw an error if they don't wish the
transaction to proceed.
Responsibility refactor of Hub/Client.

Make Client as simple as possible, move (un)subscription logic to Hub.
Remove unused function and drop a binding we don't need.
Refactor to split presence out into it's own class.

Improve encapsulation with events.
Use lodash rather than our own utilities.