Making GameContext fields accessible only to GameStates

In order to ensure that the GameContext object is only passed around to
initialize GameStates (which need all of the different objects inside
the GameContext), I made GameState a friend of GameContext and made all
of its getters private.

Friendship is not inherited in C++, so GameState now exposes protected
getters for the GameContext fields, allowing all the subclasses to get
at context data without requiring any other "friend class" declarations
other than GameState itself.

Similar to the last check-in, this forces non-GameState objects to act
on only the specific objects that they need. In particular:
- DataViewModel now queries DataMenu for save-game slot information.
- PlayerData and all its constituent fields (characters, equipment,
shortcuts, inventory, etc.) no longer use a GameContext; just the
Metadata object that they need. And for this they have access to a
read-only instance.

After this, cleaned up includes in files that included the GameContext
and GameState headers but no longer depend on them.