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.