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

It's probably better to write r.getRequests(), rather than implementing GroupRequest as Iterable