Add GameMode enum and PlayerGameModeChangeEvent

@ampayne2 It depends for what. For some events it make sense.
For a GameMode I doubt we want to force it in the PlayerGameModeChangeEvent itself...

If you want to avoid the mode change, you can cancel the event; if you want to set player's gamemode you can use the setGameMode() method from HumanEntity.