DIFFEO-52: rejester tasks can depend on each other

TaskMaster.add_dependent_task() can create work units and set a dependency
between them.  A dependency can be "hard" (earlier task fails -> later task
fails) or "soft" (earlier task fails -> later task can run).