channel.js: Implement cockpit transport code in cockpit-web

This is a new file called cockpit-channel.js the API is documented
in the file itself. The API is purposefully sparse with predictable
behavior to build off of. In particular most of the transport stuff
is hidden in a private class.

Tested in test-channel.html, which runs from 'make check' or
in a web browser.
dbus.js: Include dbus.js in cockpit.js

It will soon depend on channel.js, and we also need to include it in
all the lint goodness. Side effect of this is that it speeds up loading.

dbus.js will no longer be a generic thing, but very cockpit specific
using the channels for transport.

Fix all the various coding lint issues in dbus.js that jsl found.
ws: Add cockpit_transport_parse_command() helper function

This parses a control channel command from JSON into its most important
parts and validates that it's all there as expected.

Added tests for this.
web: Start using multiple channels over the WebSocket protocol

Migrate dbus.js to use the Channel javascript class from previous
commits and start communicating with cockpit-ws over channels.

This means there is only one WebSocket connection, even for
multiple hosts. It means that we have multiple sessions being
handled from CockpitWebsocket.

This commit doesn't yet introduce sending mulitple channels to the
session side (future work), and so each channel opens up a new
cockpit-session or cockpit-agent.

Control messages are not sent, or processed from cockpit-agent. Future
work will implement this half.

This implements alternate credential support as a control message
rather than the text in the first message of the WebSocket connection.
Described in protocol.md
dbus-test.html: Don't hang if the DBusClient closes immediately

This helps us catch certain kinds of test failures.