Completely separating the partition function from FlashSort.java.

This will allow a separate partition function (like the
CdfPartitionFunction) to be used instead, while keeping the original
in-place unstable partitioning logic.
Renamed FlashSort to CyclePartitioner, as it supports multiple
partition functions.

First attempt to sort based on the CdfPartitionFunction.
It succeeded when the sample size was the total population,
but failed for 100k pop vs. 12k sample.  The maximum of the
0th class (47) was larger than the min of the 1st class (46).

Need to investigate that.