Viewer encapsulates the window and event managing of the app.
The viewer contains a Window, a Scene and a Renderer.
Typically the viewer is used by calling Viewer::run which automatically
spins a rendering loop and processes keyboard and mouse events.
The rendering loop can also be created manually by running
Viewer::update in a loop {}