Promise composition

Added means of composing Promises by using `#zip` an `#flat_map`. Loosely based on scala's `Future#zip` and `Future#flat_map`. I hope I didn't mess up when `#execute` should be called - if I understand correctly in the case of `#zip` the Promises will be scheduled one by one unless someone schedules them all beforehand.
If you think `ImmediateExecutor` gives the behavior you want, please update the PR and I'll merge it.

Thank you for doing this work! And, again, I apologize for taking so long to get back to you.