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.
`ImmediateExecutor` seems to make a lot of sense to me - there is now slow computation to complete at that point. I completely missed that possibility. Should I change the PR?