code: public static <T> CompletableFuture<T> asyncFuture(CompletableFuture<T> future, Executor executor) {
      CompletableFuture<T> newFuture = new AtomixFuture<>();
      future.whenComplete((result, error) -> {
        executor.execute(() -> {
          if (error == null) {
            newFuture.complete(result);
          } else {
            newFuture.completeExceptionally(error);
          }
        });
      });
      return newFuture;
    }
docs: Returns a wrapped future that will be completed on the given executor.
  
  @param future   the future to be completed on the given executor
  @param executor the executor with which to complete the future
  @param <T>      the future value type
  @return a wrapped future to be completed on the given executor