Application abstraction & cleanups

- moved camera input-binding to app
- restructured window creation & main loop