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

Should supersede #3 and #5.
Ahh! I was struggling to see how we could exit once all pipelines had finished because the watch/Gaze execution prevented the executions observable from completing. Now this makes sense – I like this solution a lot!