Add state skeleton; refactor Viewport

Viewport callback requires Gamestate to be initialized