Split Client into PlayerClient and SpectatorClient.
Moved more methods to GameHandler in order to empower the SpectatorHandler.
Renamed "leave" message to "disconnect".
Added disconnect reasons.
Move player joining handler to separate method.
Ensure player disconnects due to heart beat timeouts are handled at most once.
Keep track of which players have already found their objects.
Moved found object and team number into PlayerState.
Retain PlayerStates of missing players.
Restore from missing player when rejoining.
Added to-do for when team communication will be implemented.