ws: Test that a session without channel times out

This only happens after all channels have been closed. Refactor
things a bit to make testing easier.
ws: No need for tracking the connection in CockpitWebService

Not used for anything any longer. Removing this also fixes
a leak.
ws: Handle multiple WebSockets per CockpitWebService

Multiple web sockets can be served from a single CockpitWebService,
which allows tabs to share sessions, as well as coherent implementations
of /logout and resource handlers.
ws: CockpitAuth owns CockpitWebService instances

Each time a real login occurs, we instantiate a new CockpitWebService
and return that same instance when logging in with cookies.

When doing /logout we dispose that web service instance, and force
it to disconnect.

Fixes #495
Closes #565