Further abstracted the ScreenState to be able to request a keyboard
input mechanism as well as a screen updating algorithm (good for example
for a card game that won't need to update the screen 60 frames a second)