Add an onDragAbort callback
Fix touch events.

First of all, you should never try to "detect a touchscreen". Touch
devices and mouselike pointing devices can be connected and disconnected
at any time, so the only good thing to do is accept both kinds of
events.

Secondly, a TouchEvent doesn't look like a MouseEvent, so it needs to be
mangled a bit before it can be used by a handler that expects a
MouseEvent.