Fix Issue #304

This is currently a WIP.  Today I managed to get the major pieces of it in place.  I am not yet passing tests, but the server starts.
We might end up with a timing bug here. If you close the webserver first, then try to close the socket server (which could take a while), there might be a case where before ClientManager.shutdown happens, a client sends any kind of request through the websocket, but the websocket server is not attached to an express server any more which might throw badly.
I think it's better/safer to close the socket server first and then the express server.