Abstract socket code from game/client code

Summary:
Testing code relying on resources is impossible, attempt to abstract
away as much of it as possible. Wrap the server and client connections in
SocketClient and SocketServer objects, and handle the actions through
delegation.

 * move most connection stuff into socketserver, server itself will just be a delegation tool
 * make server be a client delegate, handle socket-level client input in the server
 * rename variable to be inline with method signature
 * remove unused function
 * remove unused variable and associated accessors
 * remove unused function
 * remove unused variables
 * remve unused variables
 * clean up syntax
 * simplify starting socket server, better abstraction
 * syntax, logging
 * add fixme note for handling client requests during disconnection
 * style
 * organize file and add some comments

Test Plan: ran server throughout, connected, ran methods. life is good.

Differential Revision: https://phabricator.ericstern.com/D7