Game architecture refactoring

Main things to take away are:

- Sprite base class: anything that needs to be dynamically updated from the scene (that needs to be removed or added)
- SpriteFactory: takes care of instantiation of Sprites, used so that Sprites don't have to lug around the entire context ("world" / Grid). Also used to ensure post-initialization behavior (adding the object to the scene) and correct post-destroy behavior (that the object is removed from the scene and does not receive any further updates)