[libcontacts] Update changed contacts progressively

Update contacts in small batches to prevent blocking the UI thread.
[libcontacts] Append contacts to model progressively

Avoid blocking the UI thread when the cache is populated after process
startup.
[libcontacts] Do not emit change notifications during initial contact insert

When a contact is first loaded into the cache, no listener can yet be
interested in changes to that contact.
[libcontacts] Update modified contacts individually rather than in batches

Processing even a single changed contact can consume all the available
time between UI frames, if it causes QML bindings to be re-evaluated.