Settle on a design for the Input handling.

The sequence is as follows:
- a raw input event is generated by the OS
- the window class iterates over all of its message listeners and passes to them the message data
- if the message is handled, 0 is returned, else the def win proc is invoked
- the input event ends up in the Input::Engine
- the input engine passes the messages to all instantiated devices
- if a device handles the message, it generates an Event struct which has device specific code and data
- this is how things stay until the higher level InputHandler updates
- the InputHandler polls the Input::Engine for events
- if there are events, they are passed to the KeyBinding system (which is context based)
- if a key binding is found, an intent is generated out from the system
- the intent is then filled with the target for every entity ID registered to receive input events, and placed in the intent system
- each Action has a chance to poll for interesting intents, and process them
- when the intent is processed, it is removed from the intent system