Task groups

Each task now belongs to a group.  The only thing you can do with task
groups right now is detect when they finish executing.  You do this by
registering one or more “after” tasks, which the group will schedule to
be executed when all of the tasks in the group have finished executing.