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.

The actual session IO is now done in CockpitTransport and CockpitFdTransport. CockpitWebsocket creates instances of these as necessary.

On the javascript side the Channel class in channel.js sits below DBusClient, and provides the protocol abstraction there.

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.