code: public SmartBinder fold(String newName, MethodHandle function) {
          return new SmartBinder(this, signature().prependArg(newName, function.type().returnType()), binder.fold(function));
      }
docs: Pass all arguments to the given function and insert the resulting value
  as newName into the argument list.
  
  @param newName  the name of the new first argument where the fold
  function's result will be passed
  @param function a function which will receive all arguments and have its
  return value inserted into the call chain
  @return a new SmartBinder with the fold applied