Factor out some of the items into GameState

* move, encodeState -> toJson
Revert "Factor out some of the items into GameState"

This reverts commit dcfdf1c3b23f5efc93a167a599bbbbf7bf5d70d4.
Move gameEnd method to the GameRoom.

Get rid of the abstract "GameState" class--composition is better than
inheritance!
Make server messages slightly modular.

Remove the uid from all the server messages (replace with sender once we
get actors going). Start making client messages.
Add rest of the server-to-client messages.
Rename and document the interface.

*[To/From]Json is now the convention.
Add a Client class and move some messages outward.
Add more commenting.
Add the receive Join function of the new room.
Add terminated watcher.
Add the ChangeRole method.
Implement rest of server messages.
Add final part of the rewrite. Now to test!

Make a message parser from JSON.
Fixed logic bug in ConnectFour

GameStart counted as GameEnd and vice versa.
Working Actors-based GameRoom!

Fixed all bugs, works as well as before, but looks much cleaner (I
hope). Now just to refactor, put stuff in separate classes, try to
modularize as much as possible.
Move messages to separate files.

TODO: How does this affect mutability? Will it make it harder to change
code? Also, what's the best way to name these?
Move Client actor to its own file.
Modularize client-to-server messages.

Now only need to specify how to parse a move.
Make a specialized message to request websocket.
Merge branch 'game-refactor'