boost::variant used for nice input event handling
this doesn't compile
this does compile & pass the test
renamed InputEvent to more generic GameEvent
call-back-based event emission. Much cleaner, much better.