works by wrapping setters/clearers. Instead, we calculate the changed
keys on the fly when old_values() is called. This checks actual
values to be stored in ES, so is correct for complex data structures as
well as simple scalars. old_value() has been removed because it
needs to call old_values(), so it is more performant (esp when checking
multiple attributes) to just call old_values() yourself.
Also, save() no longer checks if the object has_changed() before saving.