d3.geo.circle: ensure coincident start/end points.

Due to floating point rounding error, d3.geo.circle would sometimes miss
out the end point, which should be coincident with the start point.

Fixes #1476.
Limit charge distance.
Optimize charge calculation.
Fix #1483; time parsing with padding modifier.
Rephrase test.
Simplify.
Remove major class from axis ticks.

The major class is now obsolete with the removal of tick subdivision.
Merge remote-tracking branch 'origin/time-parse-padding' into 3.3.1
Merge remote-tracking branch 'origin/geo-circle-precision' into 3.3.1
Bump version.
Fix missing d3.transition in IE. Fixes #1491.

IE doesn’t support __proto__ patching, so if the selection.prototype.transition
method isn’t yet defined at the time d3_selectionRoot is defined, it won’t
inherit the method when the prototype is patched later! This restores the
original order of dependencies so that the transition method is defined before
d3_selectionRoot is created.
Support parsing timezone offsets.

Note that the resulting Date object can only be in the local timezone
(or UTC), due to the limitations of JavaScript Dates.

Fixes #1494.
Support simultaneous zooming on multiple targets.

Fixes #1497, where a zoom gesture would break if a touch was started
outside the target during a gesture.

Each zoom gesture now only considers touches that were started on its
associated target element.  This allows multiple zoom gestures to occur
at once without conflicts.
Remove locations on touchend.

This avoids a potential bug where a touch identifier might be reused in
another gesture, but could still be referenced in locations0, thus
causing problems for the old gesture on touchmove.
Use distance instead of d3.event.scale.

Unlike d3.event.scale, which is a single value provided by the browser
(usually an average based on the position of all touches), we can
compute separate distances for each zoom gesture and its target,
allowing multiple gestures to occur simultaneously.
Optimise.

This block is only necessary if there are remaining touches, because
otherwise the gesture has ended and we remove this closure along with
locations0.  Thanks, @mbostock!
Rename for consistency.
Ensure that touch{move,end} listeners are removed.

Previously, if there were globally-active touches remaining, a given
zoom gesture was not ended even if locations0 was empty.  This fixes the
problem by checking to see if locations0 is empty.  If so, the gesture
is ended.
Tweak return value on touchend.

For consistency, always return undefined here.
Add a few comments.