Refactor: Character table optimization

A character table now lives at the fighting game layer, which pre-loads
a list of characters and then loads characters as needed, keeping all
characters that have already been loaded in memory. Also, now in the
mirror match case, both players will be pointing to the same character
object, since no state is kept in characters anyway. This means memory
overhead goes up but loading times are cut to basically zero once the
character has ever been loaded.