base: Move jquery bootstrap and term.js into new base package

And make the shell use this package.

The module is called 'base' but we go by the alias 'latest' which
contains the latest unstable Cockpit API. There will be counterpart
modules in the future.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
base: Move spawn.js and channel.js into base package

So they can be used from multiple packages. We also document them
in the guide and clean up the API a bit.

One minor change is that channels now automatically detect which
host they should connect to based on the page parameters.

Another is that the 'expect disconnect' logic is handled at the
lowest level, so it is available to all components.

cockpit.logout() also becomes a low level function which
integrates well with the other transport logic.

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
base: Move common styling and images into base package

This renames the shell specific CSS into shell.css and splits out
the common CSS into cockpit.css

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
server: Put the terminal into new server task and component

The server component will include various standard components
that don't have heavy outer dependencies.

Closes #1314
Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
doc: Add documentation for the terminal component

And further clarification about how embedding is used

Reviewed-by: Marius Vollmer <marius.vollmer@redhat.com>
ws: Send and expect 'init' control messages over each transport

Each transport when opened sends 'init' control messages to each
other. This is initially used to double check that the same protocol
version is in use. But this will be expanded in later commits.
ws: Send a 'channel-seed' in the WebSocket init message

This allows various web sockets to generate unique channels, without
having to get into NAT'ing everything in CockpitWebService.

This is necessary once various frames are the source of channels.
They'll need to be seeded appropriately so that they pick unique
channel ids.

The way that channels get their id, also needs to change a bit.
The id can't be allocated until the transport is open. So queueing
of messages happens at the channel level now.
ws: Send user info in the 'init' control channel message

Rather than filling in the user into the index page environment,
send it in the 'init' control message, along with the cockpit
setup info.

The index page will be changing, and this is much cleaner.

Closes #1332