code: function all(it){
    var res = new Resolver(),
        ctx = {},
        i = 0,
        yd;
  
    ctx.remaining = 1;
    ctx.result = [];
  
    for(yd of it){
      ctx.remaining++;
      Resolver.when(yd).listen(raceIt,[ctx,res,i]);
      i++;
    }
  
    if(!--ctx.remaining) res.accept(ctx.result);
    return res.yielded;
  }
docs: TODO: add and remove listeners on-demand