[libcontacts] Improve event processing logic

We should not consider all event processing handled when a busy request
object prevents us from starting another pending request.
[libcontacts] Prioritize address resolution requests over updates

Fetching changed contact details is typically less urgent than resolving
addresses.
[libcontacts] Fetch extra details to faciliate search

When idle, fetch extra contact details used to populate the search model
data set.
[libcontacts] Allow properties to be specified for searchability

A model can now specify properties that should be loaded asynchronously
to facilitate searching.

The nickname property is now loaded in the first metadata retrieval,
since some contacts have no other name details.
[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.