Initial commit for Aspect System

Added support for Aspects into the Character.
Since Aspects now drive the stat attributes of
a Character, the existing stat variables
have been removed and they are no longer
persisted in savegames.
The Archetypes have been updated to add the
first phase of Aspects, though this won't be
where they land permanently.

Also added a base level and made name a mutable
field that is only retrieved from the Archetype
on initial Character creation, and then never
again.
Pushing more archetype data into save data

The objective for character archetypes, in general, should be a single
usage for character creation. After that, the character data should be
all that is loaded when an ongoing game is loaded. Otherwise, it is
impossible to alter character data that exists in the archetype, such
as the portrait or spritesheet data.

Future work will push Aspect data into the save game, but only when
Aspect data itself is removed from the archetype and only referenced by
an Aspect ID.
Moving Aspect data to EDA files, refactoring Character data

Completely moved away from loading any data from an archetype after the
initial character creation by saving Aspect data along with the
Character serialization. To ensure that aspects aren't just repeated
everywhere in save games, they've been moved to their own files and are
now referenced by the archetypes and save data using string IDs
corresponding to the file names.

This allowed for some refactoring of the Character constructors, since
now a lot of the code doesn't need to be repeated to load from either a
save game or an archetype. Also enforcing some const-correctness when
loading in attributes from a JSON input.
Finally, removing the archetype field from Character as it is no longer
necessary.
Adding Skill Trees to Aspects

Adding Skill Tree data to Aspects, forming a graph of skills connected
in prerequisite chains.
Augmented the Aspect class to load this tree in and also to validate
that it doesn't contain any duplicate skills or any prerequisite cycles.
Cleaning up Aspect load code
Adding Skill usage to Character data

Characters now unlock skills based on skill usage. This means that
instead of the Character simply having a list of skills previously
unlocked, there is a map of skills to successful usage counts. If these
counts are high enough compared to the mastery requirement of the
skill, the skill is considered available for use.
Moving common menu functionality to MenuState
Optimizing skill tree validation a bit

Aspect::validateSkillTree made use of an additional map in order to
help the validation process along. The extra map not only needlessly
takes more memory, but also impacts the readability of the code. I've
made some changes to remove extra data structures, and to better
clarify some of the useful structures using typedefs.