Detail persistence

Whenever we update a contact in the cache, copy any existing details
of the contact to the new copy, if those details are present in the
cache but not in the new query.