adding step-middle as interpolation method
change step-middle to just step
cleaner formatting for step interpolation method
Add brush.clamp method to specify to clamp extent to range or not
Make clamp implementation more similar to extent
Don't consider dragging when determining to clamp or not
Add scale.quantize.invert
Rename quantize.invert to quantize.invertExtent
Use d3_Map instead of scale.ordinal in scale.quantize.invertExtent
Add test for scale.quantize.invertExtent
Implement scale.quantize.invertExtent with Array.indexOf
Add test for scale.quantize.invertExtent: arbitrary range values
scale.quantize.invertExtent returns null when y is not in the range
Add test for scale.quantize.invertExtent: out-of-range values and duplicate values in the range
Add quadtree.extent. Fixes #1207.
Add {cluster,tree}.nodeSize. Fixes #317.
Fix null transform attribute warning in Firefox.

Strictly speaking, the transform attribute should never be set to null;
it should be set to "translate(0)" for the identity transform, or it
should be removed using removeAttribute("transform").

Setting this attribute to null causes a warning to appear in Firefox:

  "Unexpected value null parsing transform attribute."

This occurs when using d3.transform(null), e.g. to interpolate to or
from a non-existent transform attribute (null).

This fix checks whether the value is null, and if so, returns an
identity transform.
Fix projection.clipExtent regression.

A bug was introduced in fa514dd08c9a6ac11e177da6051a76efe291d5ea, where
invisible line segments were incorrectly drawn.

Thanks to @jfirebaugh of iD for spotting it!
d3.geo.bounds: antimeridian and inflection points.

The behaviour of d3.geo.bounds has been modified slightly, such that the
minimum and maximum longitudes denote minimum and maximum meridians when
going from left to right in a standard equirectangular projection.

If the maximum longitude is in fact numerically smaller than the
meridian, this simply means that the bounds cross the antimeridian.

This fixes several issues:

* The bounding box is now a true minimum-width bounding box.
* Line segments that cross the antimeridian are now correctly handled.
* Similarly, polygons that cross the antimeridian are now correctly
  handled.

Secondly, inflection points are now detected, so that the latitudinal
range is extended in the case where the great arc contains the great
circle’s inflection point.

Lastly, support for polygons has been improved, e.g. those that wind
around the poles, and those that have a counter-clockwise winding order.

Note that as part of the winding order detection, the performance of
d3.geo.area had to be reduced somewhat (by as much as 25%).  This is
because the trick to avoid atan2 calls fails for winding order detection
in the case where a counter-clockwise area strays into a positive
quadrant.  We can reinstate the trick for area-only calculations in
future; I think correct winding order detection is more important at the
moment.

See #1154.
Fix time tests by adding Date to sandbox.

Since tests are now run in their own sandbox, assert.deepEqual was not
properly testing the returned Date objects for equality, as they weren't
instances of the same Date class used by the test itself, causing type
inference to fail.  It was always returning true, even for different
dates.