[qtcontacts-sqlite] Improve support for changelog / timestamps

This commit adds support for automatic timestamp generation.

If no creation timestamp exists at creation time, it will be
automatically generated (either the current datetime, or the
modification timestamp if that exists).

If no modification timestamp exists at modify time, it will be
automatically generated (as the current datetime).  Note that
if you want this timestamp to be consistently updated over time
across multiple saves, you need to _manually reset_ the value
between each save operation.  This is because it assumes that the
"true" modification timestamp might come from a sync source.
Merge pull request #52 from chriadam/changelog

[qtcontacts-sqlite] Improve support for changelog / timestamps
[qtcontacts-sqlite] Ensure queries are completed
Merge pull request #53 from matthewvogt/finish-query

[qtcontacts-sqlite] Ensure queries are completed
[qtcontacts-sqlite] Trim user input data

If a field's content may originate in user data entry, it should be
trimmed to remove any extraneous surrounding whitespace.
Merge pull request #54 from matthewvogt/trim

[qtcontacts-sqlite] Trim user input data
Also trim display label
Merge pull request #55 from matthewvogt/trim2

Also trim display label
[qtcontacts-sqlite] Use immediate locking mode for transactions

Since we already use exclusive locking via IPC, there will be no penalty
using immediate lock acquisition mode for transactions.  This appears to
fix the issue where readers spuriously report 'database disk image
is malformed' during writes by other processes.
Merge pull request #56 from matthewvogt/immediate-locks

[qtcontacts-sqlite] Use immediate locking mode for transactions
[qtcontacts-sqlite] Specify synchronous mode

Although this is documented to be the default setting, it is better to
set it explicitly.
Merge pull request #57 from matthewvogt/synchronous

[qtcontacts-sqlite] Specify synchronous mode
[qtcontacts-sqlite] Record the provenance of aggregated details

Each detail now records which detail it was aggregated from.
Merge pull request #58 from matthewvogt/provenance

[qtcontacts-sqlite] Record the provenance of aggregated details
[qtcontacts-sqlite] Allow syncTarget details to be modifiable

If a detail of a contact that has a syncTarget value other than 'local'
has the QContactDetail__FieldModifiable field set to true, then it
will be subject to modification during aggregate contact save.

If the aggregate has been modified such that a modifiable detail of
a syncTarget constituent has been removed, the save operation will
remove that detail from the original constituent.  Similarly, if the
aggregate has been updated to contain a modified detail and the
source detail is modifiable, the change will be applied to the source
detail.

If the relevant details are not marked as modifiable, the changes will
be applied to a local constituent.
Merge pull request #59 from matthewvogt/writable-sync-targets

[qtcontacts-sqlite] Allow syncTarget details to be modifiable
Update exported pkgconfig version
[qtcontacts-sqlite] Export temporary table functions

They are also useful outside the reader.
[qtcontacts-sqlite] Do not use execBatch for select queries

execBatch does not provide any guarantee that the returned results
correspond to the result of a batched query execution.  Instead, use
a temporary table to traverse a sequence of contact IDs.
[qtcontacts-sqlite] Remove unnecessary nested selects