web_client: use separate subscription objects per channel
new EventSource client API, adds a .cancel() methods

and sometimes (but not all the time) it even works.
invitation: tolerate out-of-order messages
relay: when a channel is destroyed, disconnect all EventSource clients
relay client: cancel EventSource on unsubscribe, don't deliver stale messages