Rewrite execution code to only terminate once all pipelines run, catch errors, correct return value

Should supersede #3 and #5.
It's not that scary, it just waits on all pipelines initially (and merges their executions into a single stream), then on any pipeline change.