Determines appropriate ShardSpecs for a job by determining whether or not partitioning is necessary, and if so,
choosing the best dimension that satisfies the criteria:
Must have exactly one value per row.
Must not generate oversized partitions.
Hadoop tasks running in an Indexer process need a reference to the Properties instance created
in PropertiesModule so that the task sees properties that were specified in Druid's config files.
SegmentInputRow serves as a marker that these InputRow instances have already been combined
and they contain the columns as they show up in the segment after ingestion, not what you would see in raw
data.