Refactoring to pass PlayerData as part of GameContext

The GameContext was always intended to carry PlayerData, but this was
not completely hooked up (the PlayerData was a null pointer in
GameContext and another PlayerData instance was passed around
everywhere). This change makes use of the GameContext for PlayerData
references and removes the extra PlayerData parameter and field from a
variety of places.

This refactor will hopefully allow for more fine-grained dependency
injection in some places, as well as allowing the GameContext to manage
interactions with player data, instead of just being a property bag
that contains it.