Move execute_frame to inside game loop.  The idea of a callback in the game loop doesn't feel natural.  The call of the game loop doesn't feel natural either, but there is something to work with here.  Fix bug in Input_device which doesn't clear the keyboard buffer on failed acquisition.