Additional over-haul of the input & events subsystems

* Refactor Joystick class to support SDL2's joystick device addition &
removal notification events; this allows us to connect & remove game
pads in-game.

* Relocate joystick subsystem shutdown from SDLApp to the nom::quit
function.

* Remove the key binding in EventHandler::on_key_down for mapping CMD+W
to close the window. (This was a terrible idea in hindsight!)

* All of the individual event structs found in system/events has been
consolidated into one header file -- nomlib/system/Event.hpp

* Introduce internal events queue for nom::Event; this fully wraps
SDL_Event internally and ultimately lets us use nom::Event for all of
our front-end API calls. The aim is to (hopefully!) provide additional
flexibility within nomlib in the future.

* SDLApp no longer declares an event structure within its class.

* EventDispatcher now uses nom::Event.

* Major clean up of new InputMapper feature; the initial API should be
close to "stable". The infrastructure now fully supports keyboard
(including modifier keys), mouse button, mouse wheel & joystick button
actions. Preliminary support for joystick axis actions is implemented,
but is currently broken. All known bugs with the input mapping feature
have been squashed.