* The KernelManager now manages multiple kernels with a uniform
API.
* The SessionManager now manages the full set of channels+streams
and the IPython.zmq.session.Session object for a single kernel.
Previously, each client (browser window) would open its own set
of ZMQ sockets to a kernel. Now one master set of connections
to the kernel is created and all clients share those connections.
In some ways, this simplifies the URL design.
I have also made kernel_ids server-side created.