Efficiency updates

* When splitting using information gain, it is more efficient to
  sort the feature and label columns and then update the split
  histograms incrementally.  This required moving the histogram
  information to the _split() function.
* Added UniqueRanges iterator, to iterate over the unique values
  and corresponding ranges of a sorted vector
* Made _split() type stable (removed None, replaced with
  const NO_BEST=(0,0)
* Minor formatting updates