Added Promises heterogeneous when

Hi,

After playing a bit with promises, I found Promises.when very useful when playing with "homogeneous" promise (Promise of the same type and mainly of the same origin/same functional domain).

For instance, if I call x times a method returning a "Promise<String>" with different parameters, I will join then with Promises.when to obtain a "Promise<List<String>>". 

But what if I would like to join "Promise" of different types and avoid to lose typed checking ?

I found the 'Tuple' version quite useful :

```java

Promise<String> usernamePromise = username(xxx);
Promise<Integer> agePromise = username(yyy);

Promise<Tuple2<String, Integer>> usernameAndAgePromise = Promises.when(usernamePromise, agePromise);

```

I am not very satisfied with the implementation (because lambda are not available and because I repeat a lot of code) as well as the name of the method that cannot just be "when".

The given pull request is more to discuss about the advantage of such methods.

Waiting for your advice !