code: public static PnkyPromise<Void> runAsync(final ThrowingRunnable operation,
        final Executor executor)
    {
      final Pnky<Void> pnky = Pnky.create();
  
      executor.execute(new Runnable()
      {
        @Override
        public void run()
        {
          if (pnky.state.compareAndSet(WAITING, RUNNING))
          {
            try
            {
              operation.run();
              pnky.resolve(null);
            }
            catch (final Throwable e)
            {
              pnky.reject(e);
            }
          }
        }
      });
  
      return pnky;
    }
docs: Creates a new {@link PnkyPromise future} that completes when the supplied operation completes,
  executing the operation on the supplied executor. If the operation completes normally, the
  returned future completes successfully. If the operation throws an exception, the returned
  future completes exceptionally with the thrown exception.
  
  @param operation
  the operation to perform
  @param executor
  the executor to process the action on
  
  @return a new {@link PnkyPromise future}