code: public SmartBinder cast(Class<?> returnType, Class<?>... argTypes) {
          return new SmartBinder(this, new Signature(returnType, argTypes, signature().argNames()), binder.cast(returnType, argTypes));
      }
docs: Cast the incoming arguments to the return and argument types given. The
  argument count must match.
  
  @param returnType the return type for the casted signature
  @param argTypes   the types of the arguments for the casted signature
  @return a new SmartBinder with the cast applied