Separate touch and mouse drag listeners.

Rather than combining the same listener for both mouse and touch, we now use
closures to avoid code duplication. This offers cleaner separation and avoids
registering touchmove and touchend listeners on mousestart, and likewise avoids
mousemove and mouseup listeners on touchstart.