Ensure we're telling the system to use OpenGL 3.3
Redesign input handling across keyboard and mouse

Having all input handling inside the InputDispatcher became quite
unwieldy after adding Mouse button support. After some thought, I
figured out how to pull this information out into smaller objects. Now
have Keyboard and Mouse objects, which are Inputs, who handle the dirty
work of converting their respective input types and mapping inputs into
Events. These Events are then sent to the InputDispatcher where it can
deal with just one thing: dispatching events.

This brought about an interseting change in API. I had to get rid of
InputDispatcher.OnKey as I didn't want the dispatcher caring about where
events came from. OnKey is now on the Keyboard itself. While this may
require a little extra code to use, it's not an API I want to use often,
and it lets me then add the same to Mouse very easily when needed.
Move EventList and EventTypeList into events package

Didn't make sense for these to live in input, as they are directly
related to Event usage.