code: public boolean hasValueChanged(Object oldValue, Object newValue) {
          if( oldValue != null && classesWithSafeEquals.contains( oldValue.getClass() ) )
              return !oldValue.equals( newValue );
  
          return oldValue != newValue;
      }
docs: Determines if there has been a change in value between the provided arguments. As
  many objects do not implement #equals in a manner that is strict enough for the
  requirements of this class, difference is determined using <code>!=</code>,
  however, to improve accuracy #equals will be used when this is definitely safe e.g.
  for Strings, Booleans, Numbers, Dates.
  
  @param oldValue Original object value
  @param newValue New object value
  @return true if the objects are different enough to indicate a change in the value
  model