Incomplete first pass at restructuring the files and decoupling the logic

So the big thing here is the ClientManager which is essentially the equivalent of the ServerThreadHandler if you were to decouple some of the logic.  Basically the ClientManager just handles the server's references to the clients and the open sockets over which it will communicate.  The ClientManager then relies upon a NetworkLayer for each connection to actually message actions over the wire.
This little class just keeps track of the various clients via a Map from clientId -to-> NetworkLayer.