Determine partitions better

  * Can handle non-rolled-up input (by grouping input rows using an additional MR stage)
  *  Can select its own partitioning dimension, if none is supplied
  * Can detect and avoid oversized shards due to bad dimension value distribution
  * Shares input parsing code with IndexGeneratorJob