refactor Run() and UpdateUserInput()

refactored Run() and UpdateUserInput() in GameEngine.cs, added some
classes, without documentation, interfaces as early version of render
logic overhaul