you can now have multiple frontends on 1 kernel

this is important for closing/reopening/refreshing the browser tabs
on an active kernel, not so much for multi-user support (which doesn't
work anyway with ipython).
try to get saving working properly.

Due to the way guids map through filenames/notebooks/kernels etc
changing the filename (ie renaming) changes the guids.

With the current model we should really start a new page + attach
to a new kernel.  I tried redirecting the notebook but it didn't
work (I think because the save request is xmlHttpReq not a browser
req).

So, instead we extract the filename and stay attached to the
original kernel.

I think ipython maps these guids differently.  First, a rename
will delete the old file.  The kernel migrates its guid to the
new filename.  I suspect we could model this behaviour as well.

Note also we dont implement checkpointing at the moment.
automatically create required ports

attempts to bind to (random) port numbers until we can find
enough free ones.  not sure how idiomatic this is.