code: public static <T> Constructor<T> bestConstructor(Class<T> clazz, Class<?>[] argTypes) throws AmbiguousConstructorMatchException {
          return bestConstructor(collectConstructors(clazz), argTypes);
      }
docs: Finds the best constructor for the given arguments types.
  @param <T>
  @param clazz
  @param argTypes
  @return constructor, or {@code null}
  @throws AmbiguousSignatureMatchException if multiple constructors match equally