Top-level component architecture

I redesigned the application's top-level architecture (i.e. the early stages of input and rendering) to decouple the data (the screen list, the virtual controller) from the processes that manipulate them. This kind of separation is a core principle of the Data-Context-Interaction pattern.

There are also a couple of bugfixes included in this patch. For example, the LevelSelectScreen would previously push a new copy of the MainMenuScreen onto the scene, rather than reusing the old one. This could theoretically (if you went between the level selection and the main menu enough) cause an out-of-memory situation. In addition, the toolbox is now removed through ExitScreen, rather than affecting the scene directly.