code: public SmartHandle apply(int index, Object arg) {
          return new SmartHandle(signature.dropArg(index), MethodHandles.insertArguments(handle, index, arg));
      }
docs: Apply an argument into the handle at the given index, returning a new
  SmartHandle. The new handle will use the given value for the argument at
  the given index, accepting one fewer argument as a result. In other words,
  fix that argument (partial application) into the given handle.
  
  @param index the index of the argument in the new SmartHandle's Signature
  @param arg  the argument value
  @return a new SmartHandle that already has applied the given argument