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.