code: public <R> Future<R> map(final Function<? super T, R> success, final Function<Throwable, R> failure) {
          return Future.of(future.thenApply(success)
                                  .exceptionally(failure));
      }
docs: Map this Future differently depending on whether the previous stage
  completed successfully or failed
  
  <pre>
  {@code
  Future.ofResult(1)
  .map(i->i*2,e->-1);
  //Future[2]
  
  }</pre>
  
  @param success
  Mapping function for successful outcomes
  @param failure
  Mapping function for failed outcomes
  @return New Future mapped to a new state