Implement series(tasks)
parallel's opposite. Write series(tasks) that runs each zero-argument task function one at a time, only starting the next after the previous has resolved, returning all results in order.
await series([() => step1(), () => step2()]);
// step2 doesn't start until step1 has finished