It's also used for cache flushing on any edit.

I've rewritten the code somewhat to prevent the cloning until we need it in 9aedb1d.

I've left the property as `protected` to match `$data_object` - the getter implies that it shouldn't be accessed directly, and leaving it protected allows subclasses to access it, for example, if they ever needed to replace the `getOldObject()` method.