Move SpriteBatchExtensions to its own file.
Move the VirtualController creation from ScreenRenderer up to PuzzlePathGame.
Major overhaul of the input subsystem. The design is weak right now, but it lays some important groundwork.
Refactor the ScreenRenderer and Scene so that Scene is more of a "dumb model".
Rename ScreenRenderer to RenderComponent.
Improve input infrastructure in GameScreen.
Move TopLevelModel to its own file.
[Bugfix] LevelSelectScreen adds a new MainMenuScreen rather than returning to the old one.
Make the TopLevelModel controller ~not~ a WritableVirtualController.
Simplify input usage from GameScreen subclasses
Make sure that no screen is removed without calling ExitScreen() on it.
Merge branch 'component-architecture'

Conflicts:
	PuzzlePathDimension/Menus/GameplayScreen.cs
	PuzzlePathDimension/Menus/HowToPlayScreen1.cs
	PuzzlePathDimension/Menus/HowToPlayScreen2.cs
	PuzzlePathDimension/Menus/HowToPlayScreen3.cs
	PuzzlePathDimension/Menus/HowToPlayScreen4.cs
	PuzzlePathDimension/Menus/LevelSelectScreen.cs
	PuzzlePathDimension/Menus/LevelStatusScreen.cs
	PuzzlePathDimension/Menus/MainMenuScreen.cs
	PuzzlePathDimension/Menus/PauseMenuScreen.cs
	PuzzlePathDimension/PuzzlePathDimension.csproj