Re-combined Server and Client

After much soul-searching, I decided that the only way I'm going to
break the network crawl is by giving the client access to all the same
methods as the server, so that the server only has to send changes to
the client's local state.py object.