Replace when/sequence with own implementation

`sequence` from `when` does not do the desired behavior when any of the
sequenced tasks are rejected, which is to pass along all the results
gathered up until the point of failure. `when/sequence` only passes
along the result of the failing task in the task queue. We require this
in order to be able to properly kill `buster-server` and `phantomjs` if
either of the two fail during startup, or `buster-test` is rejected due
to test failures.