Fix for re-entrant zoom gestures.

There are several conditions where a zoom gesture can begin while a zoom gesture
is already in progress. For example, you can use the mousewheel after starting a
drag gesture, or you can start a zoom transition interrupting another that is
already in progress. The zoom behavior now tracks concurrent zoom gestures so
that a zoomstart is only triggered at the very beginning, and a zoomend is only
triggered at the very end.