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