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.
I changed it - I think `ImmediateExecutor` is the more correct choice.