GameStateManager

This allows for multiple states to be running at the same time, and may
be swapped around