[libcontacts] Improve separation between request initiation and other processing

We should start requests as early as possible, and other tasks can be
processed whenever we are unable to start new requests.
[libcontacts] Update partial contact correctly

Using the nemomobile contacts engine, a partially fetched contact will
always contain the detail types from the main contact table, even if
they are not included in the detail mask.  Therefore, they should not
be copied from the existing cache item if already present.
[libcontacts] Append contacts in large batches

Batched append slows down the overall throughput, but is necessary
to give interactivity during startup with huge contact counts. With
10000 contacts, the penalty is less than 10% overall, and the app
remains usable during the append period.