Dialogue System / Game States

Introduced two new systems to the game: a dialogue system and a game
state system.

Game States act as a messaging, subscriber system, primarily to allow
the dialogue system to interact with other aspects of the game. Any
class which inherits from GameStateListener can subscribe to one or more
states using their name; when a state is altered
GameStateListener::stateChanged is called, passing both the name of the
changed state and it's new value.

State values are stored as std::string objects, but can also be treated
as integers with the GameState::addValAsInt function. Currently this
system is only able to alter states which are already in memory, and as
such is limited in what it can do.

Dialogue allows the player to talk with other, non-hostile NPCs by
right-clicking on them. This replaces the game's combat log with a
dialogue box, in which NPC's text and the player's available options are
displayed. The playeer can select options either by clicking them in the
dialogue box or by using num keys.

Dialogues are queued for characters within the new DialogueComp
component as a queue of strings which represent specific dialogue names.
The DialogueComp also holds the name of the file in which that
character's dialogues are found, thus a character can only initiate
dialogues from one file, but a file can hold the dialogues of more than
one character. The semantics of the dialogue XML script are documented
in the dlgTemplate.xml file.