code: public static <V> PnkyPromise<V> first(final Iterable<? extends PnkyPromise<? extends V>> promises)
    {
      final Pnky<V> pnky = Pnky.create();
  
      final AtomicInteger remaining = new AtomicInteger(Iterables.size(promises));
  
      for (final PnkyPromise<? extends V> promise : promises)
      {
        promise.alwaysAccept(new ThrowingBiConsumer<V, Throwable>()
        {
          @Override
          public void accept(final V result, final Throwable error) throws Throwable
          {
            if (error == null)
            {
              // May be called multiple times but the contract guarantees that only the first call
              // will set the value on the promise
              pnky.resolve(result);
            }
            else if (remaining.decrementAndGet() == 0)
            {
              pnky.reject(error);
            }
          }
        });
      }
  
      return pnky;
    }
docs: Creates a new {@link PnkyPromise future} that completes successfully with the result of the
  first supplied future that completes successfully if any of the supplied futures complete
  successfully. The returned future completes exceptionally if all of the provided futures
  complete exceptionally.
  
  @param <V>
  the type of value for all promises
  @param promises
  the promises to watch for completion
  
  @return a new {@link PnkyPromise future}