Compares value with expected and replaces it with new value if values matches.
If new value is not null, it must be frozen or permanent object.
Parameters
expected - the expected value
new - the new value
Exceptions
InvalidMutabilityException - if new is not frozen or a permanent object
Return the old value