code: public <T> CompletableFuture<T> putAsync(final Class<T> type, @DelegatesTo(HttpConfig.class) final Closure closure) {
          return CompletableFuture.supplyAsync(() -> put(type, closure), getExecutor());
      }
docs: Executes an asynchronous PUT request on the configured URI (asynchronous alias to the `put(Class,Closure)` method), with additional
  configuration provided by the configuration closure. The result will be cast to the specified `type`.
  
  [source,groovy]
  ----
  def http = HttpBuilder.configure {
  request.uri = 'http://localhost:10101'
  }
  CompletedFuture<Date> future = http.putAsync(Date){
  request.uri.path = '/date'
  request.body = '{ "timezone": "America/Chicago" }'
  request.contentType = 'application/json'
  response.parser('text/date') { ChainedHttpConfig config, FromServer fromServer ->
  Date.parse('yyyy.MM.dd HH:mm', fromServer.inputStream.text)
  }
  }
  Date date = future.get()
  ----
  
  The configuration `closure` allows additional configuration for this request based on the {@link HttpConfig} interface.
  
  @param closure the additional configuration closure (delegated to {@link HttpConfig})
  @return the {@link CompletableFuture} containing the result of the request