Add GameMode enum and PlayerGameModeChangeEvent

I'm wondering if it makes sense to generalize this to `GameModeEvent`, that's the pattern we've been using so far. Then you can use `PlayerGameModeChangeEvent extends PlayerEvent, GameModeEvent`