code: public <T extends Object> T execute(Retriable retriable,
                                          ExceptionHandler exceptionHandler)
          throws Exception {
  
          if (exceptionHandler == null) {
              throw new IllegalArgumentException(
                  "exceptionHandler must be non-null");
          }
  
          Exception lastException = null;
          for (int i = 0; i <= maxRetries; i++) {
              try {
                  return (T) retriable.retry();
              } catch (Exception e) {
                  lastException = e;
                  exceptionHandler.handle(e);
                  if (i <= maxRetries) {
                      WaitUtil.waitMs((long) Math.pow(i, waitBetweenRetriesMultiplier) * waitBetweenRetries);
                  }
              }
          }
          throw lastException;
      }
docs: Executes the action of a Retriable, and retries on error. Provides a way
  to execute a variety of methods and allow a retry to occur on method
  failure.
  
  Returns the necessary object type.
  
  @param retriable
  @param exceptionHandler for customing handling of exceptions - especially with respect
  to customized logging.
  @throws Exception