Fix autotest broken by change to store date for birthday details

Birthday details were converted to store date information only, to
remove the relevance of timezone from the stored data.
[qtcontacts-sqlite] Simplify reader/writer instantiation
[qtcontacts-sqlite] Support functions for two-way sync adaptors
Use typedef to simplify declarations
[qtcontacts-sqlite] Report changed sync targets
Fix composition of gender detail update
[qtcontacts-sqlite] Create interface for out-of-band storage

Allow clients to store out-of-band data in the contacts DB, which will
be kept in sync with contacts data manipulations.
Use definition mask to minimize writes during aggregation.
Avoid conversions from internal to API ID when calling readContacts
Remove obsolete TODO
Rearrange SQL query for improved consistency.
[qtcontacts-sqlite] Fix aggregation query where subject contains multiple details

The old version did not expand correctly where the subject contained
more than one email address, or phone number, or online account.
Remove unused timestamp parameter
[qtcontacts-sqlite] Use temp table to find modifiable details
Remove invalid TODO comments
[qtcontacts-sqlite] Ensure detail comparison verifies key/value matches
[qtcontacts-sqlite] Remove obsolete context type definitions

These values are no longer used.
[qtcontacts-sqlite] Create sync-target constituent when required

When storing added details received from an external source, create
a constituent contact for that sync source if necessary to store the
new details.
[qtcontacts-sqlite] Add function to access contact manager engine

The contact manager engine must be used to access functions which
extend the Contacts API; to access these functions, use the new
contactManagerEngine() function to retrieve a typed pointer to the
engine from the QContactManager.

Note that 'QT += contacts-private' is necessary to access the engine
property of the contact manager class.
[qtcontacts-sqlite] Support add/remove contacts via storeSyncContacts

A contact pair of (empty, non-empty) requests that a constituent for
the current sync target be created with the updated details; a pair
of (non-empty, empty) requests that the constituent identified by the
non-empty contact should be removed.  Only constituents that match
the current sync target will be removed.