Updated Model dirty checks to ignore numerically equivalent fields

Changing a field value from an (int) to a numerically equal string should not cause the field to appear 'dirty', i.e. "1" == 1 should be fine and not return true for isDirty() as this could lead to some unexpected behaviour - especially when the field is read out of the database and saved on the model as a string (despite being pulled from an int type field), and then the model is later updated with an int value which is the same. In reality it hasn't been updated, but it still amounts to a change

Previously request for 4.0 branch in #2904