Fix cache saving stale data

After fixing a problem with object caches not being correctly invalidated we discovered a regression. Saving instance properties would trigger the object cache system to increment the timestamp on the instance and save it a second time. Unfortunately, it was also saving old field values, overwriting the changes.

The solution is to fetch the object from the database before incrementing the counter, ensuring that we do not write back stale values.
In this case we are in fact relying on `save` and `delete` signals to detect changes to adjunct objects and invalidate the cache. If the code changes such that an adjunct object can be changed without emitting such a signal then the cache invalidation will break. Currently we consistently use `save` for updates ... we'll have to watch out for changes to that.

@maurizi is correct that this particular use of `update` is not a problem.