Add zoom.center. Fixes #616.
Fix #1413 - d3.map copy constructor.
More restrictive copy constructor.

Rather than duck-checking for a forEach method, limit the use of forEach to
d3_Map instances. In ECMAScript 6, the map.forEach method passes the callback
(value, key) rather than (key, value); likewise, array.forEach does the same.
Avoid binding multiple touch listeners for zoom.

For a two-finger pinch, if two touchstart events fire, this results in
two touchmove and touchend listeners.  The first will have a single
location in the locations variable, but its touchmove listener will
fire with two touches, causing it to fail due to not finding the
location of the second touch.

If the first listener fires before the second, this exception breaks
touch zooming (as no further listeners will be called), but the order is
undefined so may be browser/device dependent (for reproducing the bug).

Since zooming only ever involves a single gesture at a time, it makes
more sense to only have one listener of each type at a time, unlike
dragging, which involves multiple drag gestures at once.
Fix issue with drag suppression for multitouch.

Due to the touchend listener being overwritten for every touchstart, two
touchstart events would result in d3_event_dragSuppress being called
twice, with only a single drag restore, meaning that a document's
user-select style could be lost.

This restructuring means that the first touchstart creates the closures
for subsequent touchstart, touchmove and touchend events.  A nice
side-benefit is that fewer closures are created for multitouch.
Fix #1420 - regression with degenerate log ticks.

Commit 59554738 broke the check for a degenerate domain; this restores the
original check and adds a test to verify this behavior.
Optimized ascending.js

No need to repeat ">="

"a < b ? -1 : a > b ? 1 : 0" would be better, but I don't know if it would break logic.
Optimized descending.js

No need to repeat ">="... "===" is faster (same type comparison operator)
Update permute.js

Why? Less vars, less operators, and this difference:
http://jsperf.com/array-constructor-vs-literal-modalities
Optimized set.js

length cache, ++i faster operator.
Optimized array.js

Less operators, vars and:
http://jsperf.com/array-constructor-vs-literal-modalities
Optimized number.js
add beforesend event to xhr. fixes #1397
Optimized set.js
Optimized array.js
Better test for automatic tick precision.
Fix #1431 - sort with null nodes.
Add a few comments.
Fix dbltap detection.
Minor optimisation.