Distinguish between playing and spectating a game.

As proposed by @stevenroose in #10, playing and spectating need to be decoupled.
* `Client` and `Handler` are now `PlayerClient` and `PlayerHandler`.
* `PlayerHandler` no longer has a `playerPosition` method, meaning that players can no longer receive position updates from other players.
* `SpectatorClient`s can listen to any game without actively participating in the game. Players cannot see any of the spectators in the game.
* `playerPosition` and `playerFoundObject` also receive the `playerNumber` in `SpectatorHandler`. This ensures that no state needs to be retained by spectators to correctly follow up on the game and allows spectators to join and leave at any point in time.