Introducing when/distribute operation for task execution.

when/distribute is a new operation for task execution. It's much alike pipeline but with 2 fundamental differences:

1. The tasks return values are cumulatively passed as inputs to subsequent tasks.
2. The resolved promise resolves to an array with the return value of each task.