Refactor presence channel membership handling, taking a similar
approach to the JavaScript client.
Add some specs around presence channel subscription and member handling.
It is permissible to call unsubscribe on a channel that may have been
marked as not subscribed (e.g. due to a disconnection).

This is because an explicit unsubscribe marks the end of the lifecycle
of that channel object: all bindings are removed and internal references
to that object are discarded.

I've added a comment that elaborates on this.
Renamed to handleDisconnect: as it signals the intent more clearly 
without leaking implementation details of *what* channels do on 
disconnect (i.e. they become implicitly unsubscribed).
Expose the URL of a connection as a read-only property.
Update presence demo, removing broken buttons and using new delegate API.
The demo should start a reachability check on disconnect too.
Replace assertion with silent return.

Client's should generally not be calling this method directly anyway.
Log a warning about sending events when disconnected and do not even
attempt to send them (will no longer crash anyway due to removal of
assertion but logging is useful).