code: public <T> JaversBuilder registerValue(Class<T> valueClass, CustomValueComparator<T> customValueComparator) {
          argumentsAreNotNull(valueClass, customValueComparator);
  
          if (!clientsClassDefinitions.containsKey(valueClass)){
              registerType(new ValueDefinition(valueClass));
          }
          ValueDefinition def = getClassDefinition(valueClass);
          def.setCustomValueComparator(customValueComparator);
  
          return this;
      }
docs: Registers a {@link ValueType} with a custom comparator to be used instead of
  default {@link Object#equals(Object)}.
  <br/><br/>
  
  Given comparator is used when given Value type is:
  <ul>
  <li/>simple property
  <li/>List item
  <li/>Array item
  <li/>Map value
  </ul>
  
  Since this comparator is not aligned with {@link Object#hashCode()},
  it <b>is not used </b> when given Value type is:
  
  <ul>
  <li/>Map key
  <li/>Set item
  </ul>
  
  For example, BigDecimals are (by default) ValueTypes
  compared using {@link java.math.BigDecimal#equals(Object)}.
  If you want to compare them in the smarter way, ignoring trailing zeros:
  
  <pre>
  javersBuilder.registerValue(BigDecimal.class, (a,b) -> a.compareTo(b) == 0);
  </pre>
  
  @see <a href="http://javers.org/documentation/domain-configuration/#ValueType">http://javers.org/documentation/domain-configuration/#ValueType</a>
  @since 3.3