Use Json constructors instead of case classes.

- SCMessage is a trait that provides an apply() function which returns
  JSON. Subobjects provide a method for transforming their data into
  JSON.
Use JSON pattern matchers on CSMessage.

- Also made Client an abstract class. Maybe change the name to
  'WebSocket'?
Refactor/document Client.

todo: Rename?
Refactor the Update pattern match.

We have a client bug as it's not updating the game state...
Merge branch 'unapply'