initial implementation for Q1

uses string-based dependency and event system to track which parts of a
flow have completed