code: public static <T, I extends T> Class<?> resolveArgument(Class<I> initialType, Class<T> targetType) {
          return resolveArgument(resolveGenericType(initialType, targetType), initialType);
      }
docs: Returns the raw class representing the type argument for the {@code targetType} resolved
  upwards from the {@code initialType}. If no arguments can be resolved then
  {@code Unknown.class} is returned.
  
  @param initialType to resolve upwards from
  @param targetType to resolve arguments for
  @return type argument for {@code initialType} else {@code null} if no type arguments are
  declared
  @throws IllegalArgumentException if more or less than one type argument is resolved for the
  give types