Implement synchronisation of server state with client.

Summary:
This implements synchronising in-game state from the client to the server and vice-versa.  Currently with this update the server is entirely authoritive, which means the user can't move the player on the client without requesting the server to move the player's location.

In the future, we'll use Protogame's event system to send input events from the client to the server, and predictively update the local player entity (which will then be synced back with the server on the next frame).

Test Plan:
There are two important things to test with regards to this diff:

  - First, make sure that when the server changes the player's location it gets synchronised with the client.  You can open the console with `~` and type `server testupdate` as a command which will instruct the server via `GameState` to move the player character (see `GameState.cs` in the diff for the implementation of this in `InternalMessage`).
  - Second, when you start the game from the main menu that the server is started locally.  When you press `Esc` from within the game to bring you back to the main menu, the server process should be terminated (use Task Manager / Process Explorer to verify).  You should be able to connect again, exit and repeat an unlimited number of times.  Testing this ensures the game cleans up the server process correctly and that the client can connect to new servers after the user has returned to the main menu.

Reviewers: Sabre070

Reviewed By: Sabre070

CC: buildbot

Maniphest Tasks: T125

Differential Revision: http://code.redpointsoftware.com.au/D108