Corrected all code that didn't follow the design- BRANCH FROM THIS

This commit should have all the game code following the design (no dirty
hacks).  Only thing TODO would be win/lose algorithm (and save/load?
don't know the state of that though).

Too much to list, but some things:
- Fixed all state issues that were present, so doors can now lock,
close, open freely from one state to another
- Doors are now given a trivia item on creation (which is given from a
trivia item factory, which happens to be databased)
- the DatabaseTriviaItemFactory maintains the 'used' IDs so as to not
generate duplicate TriviaItems; this behavior is fine
- Refactored all the win/lose and TryToOpen/TryToMove stuff so it makes
sense
- replaced all uses of static constant integer types to true enumerator
types (type safety)
- removed the 'middle click lock door' debug behavior
- made player animation start where the current player is; this prevents
the player from 'teleporting' to the old room's location when animation
starts