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

The purpose of the new work allocation is to reduce the overall output file count.  Also included in this request is some optimizations for the daily sweeper code.
this is intentional.  the partitions at the beginning of the list are the largest and when camus falls behind because of a single large topic, many small topics will stop getting pulled.  changing the order means all the small topics are pulled to completion and only the big topic is left not being fully pulled.