Implement chatting.

That sounds like a simple feature but this is a very large commit. All sorts of
things had to be changed everywhere to accommodate the chatting feature.

Technically, each game now has a channel associated with it and game clients
can use it if they want. The Websocket client uses it because it can.

I also implemented the chat on the client side, in the browser interface. While
at it, I changed the interface design a bit to have a grayish background. This
is hopefully a little easier on the eyes than the old blue background thing.

I implemented a Dfterm3T monad transformer to carry around a GamePool,
UserSystem and a UserVolatile and Dfterm3ClientT transformer that has
everything Dfterm3 monad transformer has but also includes information if the
monad user is "logged in" to the system. These monads may become useful later.
Or at least I hope so because writing them took precious time.