add BinnedSplitter, and a simple floating point binner to use with it

(Also includes some cruft from re-formatting docs)

This makes the default Double splitter be a standard BinarySplitter but wrapped in a binner which converts to a very low-bit floating point representation to limit the number of unique values.

cc @snoble 
for example I thiiiink `(sign, sign*base2Exp, sign*mantissa)` is `(Long,Long,Long)` and sorts correctly (I don't love this)