Add Application base class, among other things.

- SDLApplication now contains more of the SDL-specific code.

- Event handling is now done via a handle_event method that takes
  the event kind (a symbol) and keyword arguments for event data.
  Events are queued or sent through the event handling machinery by
  calling emit_event(kind, **data), where **data is any named data
  to be passed along with the event and kind is a Symbol identifying
  the event kind.

- Event propagation is fairly simple:

  Delegates go first and are sorted in order of priority. After that,
  the event is passed to any event-specific methods of the application.
  If at any point a delegate or the application returns a true-ish
  value (i.e., non-nil and non-false), the event ceases to propagate.

  Event-specific methods are those named for handle_#{event_kind}. They
  do not receive the kind of event being handled as an argument, only
  the named event parameters. Recommended that all event handler
  methods have a catch-all argument (i.e., `**_`) to swallow data they
  don't care about.
Throw event names -> handler names in a cache hash.

I like saying cache hash.