Fix spurious touchmove without touchstart.

Fixes #1497. Because we listen to touchmove and touchend events on the window,
whereas touchstart events are restricted to the targeted element, it was
possible to receive a touchmove event for a new touch that started outside the
targeted element without first receiving its touchstart event. The fix is to put
the temporary touchstart listener during the gesture on the window, like the
touchmove and touchend events. We also use a capturing listener and temporarily
disable the touchstart listener on the target to prevent duplicate touchstart
events from being received.