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

This is a bit fragile, if two mappers for the same topic both work on the group request, they will both end up writing to the file with partitionId == 0.  If we request all the requests for the same topic needs to go to the same mapper, the work allocation might not be balanced.