refactor and flesh out key input handling
The input handling is improved by adding the ability to support ongoing key presses as opposed to the simply registering simple one-off key strokes.
This also adds support for rotation, something that does not actually do anything yet, this yet and is just meant as a proof-of-concept.