When a thread is created it *must* pass its promise satisfiability to
its children.
When a thread finishes, we should remove it from all promises. This can
help prune a search early, if some read was depending only on the
finishing thread: we can then declare an unresolved promise.