Refactor screenshots

I have taken the time to refactor the ScreenshotAppState and made the system more extendable.

Key changes:
- Split out the SceneProcessor from the AppState.
- Separate the writeToFile aspect from the SceneProcessor, what happens to the screenshot after it is taken is now pluggable.
- The file writing has support for custom naming schemes.

This is still a bit WIP, but please give me your thoughts.

 I will squash this when it is cooked =)