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.
Preserve domains exactly.

Fixes #1241. With d3.scale.pow, d3.scale.sqrt and d3.scale.log, the underlying
implementation is a linear scale. Due to the transformation a linear domain and
the limits of floating-point precision, the reported domain could differ
slightly from what was set. Now, the set domain is preserved exactly.
Fix #1247 - more robust interpolation, again.

This removes the use of interpolateString if the start and end values passed to
d3.interpolate are different types; the interpolation behavior should be based
solely on the end value. Now if you interpolate an undefined attribute (the
empty string) to a number, it will use number interpolation as expected.

This also fixes interpolateString such that it always returns a string, even if
both the start and end value are coercible to numbers.
Merge pull request #1236 from mbostock/time-sandbox

Fix time tests by adding Date to sandbox.
Merge remote-tracking branch 'origin/geo-bounds' into 3.1.7
Merge remote-tracking branch 'origin/clip-view' into 3.1.7
Merge remote-tracking branch 'origin/transform-null' into 3.1.7
Merge remote-tracking branch 'origin/fix-scale-domain' into 3.1.7
Merge remote-tracking branch 'origin/fix-interpolate' into 3.1.7
Bump version.
Merge branch 'master' of https://github.com/mbostock/d3