Adding pluggablility to work allocation, along with a new work allocation strategy to group small topics within the same task.

As long as the total work is still balanced across all tasks, it should be ok.  But we could add a parameter that modifies this behavior.  For example small.topic.percentage.of.average.threshold=50 would mean partitions that are less than 50% the average partition size are considered small.