Shorter implementation of polygon.area.
Allow console.warn from tests.
Standardize on open polygons. Fixes #443.

If you try to create a d3.geom.polygon with a closed polygon, it is now
automatically converted to an open polygon by stripping the closing coordinate.
Support both open & closed polygons.

Rather than converting closed polygons to open polygons on input (which could
potentially be destructive), tweak the polygon methods slightly so that they
work on either input.

This commit also changes d3.geom.polygon to use a prototype, much like
d3.selection, rather than creating every method as a closure. This makes it much
faster to construct a polygon.
Limit transform interpolation to transition.attr.

D3’s transform interpolator is designed for SVG transforms; unlike CSS3
transforms, SVG transforms do not have units and are limited to 2D. This commit
limits transform interpolation to transition.attr, so that it only applies to
SVG transforms and not CSS3 transforms which are assigned via style. Thus, if
transition.style is used to interpolate the transform style, the default string
interpolator will now be used.

Note that string interpolation of CSS3 transforms is still likely to break; you
should use CSS3 transitions instead. Fixes #1323.
Remove test dependencies on DOM.
Allow pack.radius to be specified as constant.
Accept function for selection append and insert.

Like selection.select, selection.append and selection.insert can now accept a
function which returns a node. This makes it slightly easier to append or insert
elements whose name is computed from data, or to append elements that already
exist (say from an element pool).

There has been much discussion regarding whether the function should return the
name of the element or the element itself. Returning a name is less work for the
caller, but only supports creating new elements; returning a name is also more
consistent with how D3 defines attribute values, but D3 does not allow attribute
names to be specified as functions. So, it seemed better to opt for consistency
with selection.select and selection.selectAll, which accept functions that
return elements, since this is more expressive. Of course, you can still use
select and selectAll to append elements, but using append to do that directly is
more intuitive.

Related #4 #311 #724 #732 #734 #961 #1031 #1271.
Test for append(function).
Merge branch 'fix-transform-interpolate' into 3.2.3
Merge branch 'fix-polygon-clip' into 3.2.3
Merge branch 'append-or-insert-function' into 3.2.3
Merge branch 'fix-pack-constant-radius' into 3.2.3
Merge branch '3.2.3'