Test client. It hits:

* Pinging/ponging
* GCing
* Player registration
* Moving

Example (with ponging off):

*Client> forM_ [cmain, cmain, cmain] forkIO
*Client> + Sending {"email": "ThreadId 282"}
+ Sending {"player": {"email": "ThreadId 282"}, "x": 1.0, "y": 1.0}
+ Sending {"player": {"email": "ThreadId 282"}, "x": 0.0, "y": 0.0}
+ Sending {"email": "ThreadId 283"}
+ Sending {"player": {"email": "ThreadId 283"}, "x": 1.0, "y": 1.0}
+ Sending {"player": {"email": "ThreadId 283"}, "x": 0.0, "y": 0.0}
+ Sending {"email": "ThreadId 284"}
+ Sending {"player": {"email": "ThreadId 284"}, "x": 1.0, "y": 1.0}
+ Sending {"player": {"email": "ThreadId 284"}, "x": 0.0, "y": 0.0}
+ Pinged: "{\"ping\": true}"
+ Ponged
+ Pinged: "{\"ping\": true}"
+ Ponged
+ Pinged: "{\"ping\": true}"
+ Ponged
ghc: ConnectionClosed
ghc: ConnectionClosed
+ Pinged: "{\"ping\": true}"
+ Ponged
ghc: ConnectionClosed
+ Sending {"player": {"email": "ThreadId 283"}, "x": 0.5, "y": 0.5}
+ Sending {"player": {"email": "ThreadId 282"}, "x": 0.5, "y": 0.5}
+ Sending {"player": {"email": "ThreadId 283"}, "x": 0.7, "y": 0.7}
+ Sending {"player": {"email": "ThreadId 282"}, "x": 0.7, "y": 0.7}
+ Good night
+ Good night
+ Sending {"player": {"email": "ThreadId 284"}, "x": 0.5, "y": 0.5}
+ Sending {"player": {"email": "ThreadId 284"}, "x": 0.7, "y": 0.7}
+ Good night
Server now understands pinging, ponging, GCing, registration, and moves
Parametrize client on shouldPong
Merge pull request #5 from trello/server-spinach

server-spinach: pinging, registration, moves