Add d3.bisectBy(comparator).

Fixes #1766. Unlike d3.bisector(accessor), this allows you to define a bisector
that works in reverse order.

An awkward aspect of implementing bisection on top of a comparator is that it is
often the case that the sorted array contains objects (e.g., rows from a TSV),
while the search value is a primitive value (e.g., a number). Thus, you want to
apply an accessor to the array elements but not to the search value.

The solution here is to invoke the comparator deterministically: the first
argument is always an element from the array, and the second argument is always
the search value. This lets a comparator apply an accessor to array elements but
not to search values.
Instead of bisectBy, replace bisector.

For backwards-compatibility, bisector checks the arity of the specified
function, and if the function only takes a single argument, it is wrapped with a
suitable comparator.
Prefer interpolateNumber when coercible to number.

Objects that are coercible to numbers, such as Dates, are often more usefully
interpolated as numbers rather than as objects.
Merge branch 'bisect-comparator' into 3.4.4
Merge branch 'fix-interpolate-number-coercible' into 3.4.4