Multiple clients/sessions over a WebSocket

These patches implement the first part of the protocol refactoring. Multiple cockpit-agent sessions are handled by CockpitWebSocket in cockpit-ws, and multiple DBusClients use a single WebSocket in cockpit-web.

This implements much of the protocol described in the doc/protocol.md file.

What's not implemented is (future work):
 * Connecting to different DBus services
 * Multiple channels handled by a single cockpit-agent session.
 * Forwarding of control messages to cockpit-agent.