Separate Client from SocketClient, have Server be the mediator

Summary:
Add id to Client for mapping

prep socket/client mapping in Server

push client disconnect to server

move socket write to server from client

remove access to host property from client, which will go away

separate disconnecting and disconnected states from client

remove host from client

completely separate client from its socket

clean up more vigorously on client disconnection (probably overzealous, this will get revisited)

Test Plan: run, quit, reconnect, shutdown, etc. watch for stack traces, errors, crashes.

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