better branch handling

- branches must declare which tasks they may delegate to in order to map
  the complete connection tree
- instead of blocking from within the branch, the branch adds observers
  to its parent tasks to control execution order