Initial GameState

Implements the GameState, and sets it up as ready for a game (with no
players, a list of unassigned roles, and nobody alive/dead).
Allow players to be added to the game

Adds players and updates the list of alive players and unassigned roles.
This required that the "underlyingType" of the Role become exposed as a
readonly type, so that we could use it for looking up in the table.