code: public SmartHandle permuteWith(SmartHandle target) {
          String[] argNames = target.signature().argNames();
          return new SmartHandle(this, permuteWith(target.handle(), argNames));
      }
docs: Produce a new SmartHandle by permuting this Signature's arguments to the
  Signature of a target SmartHandle. The new SmartHandle's signature will
  match this one, permuting those arguments and invoking the target handle.
  
  @param target the SmartHandle to use as a permutation target
  @return a new SmartHandle that permutes this Signature's args into a call
  to the target SmartHandle.
  @see Signature#permuteWith(java.lang.invoke.MethodHandle, java.lang.String[])