VCardParser.php: add support for FAX property
ZarafaBridge: use tag array to restrict size of db reads
Look up the store for an address book dynamically

Previously, there was only one store, so the code assumed that that store was
used. Now we want to use a second store, the public store, so it becomes
necessary to lookup the store when given an address book ID. We do this by
saving the store when we look up the address books.
ZarafaBridge: add restriction functions

These functions return a restriction array that can be used in
calls to mapi_table_*.
ZarafaBridge: add support for public address books

Add the public address books to the list of available address books.
If no PR_CARDDAV_URI available, generate one from the EntryID

Previously the code generated a random GUID and wrote it back to the contact,
but that does not work if it's a public contact made by someone else, since we
don't have write privileges for it. So instead, generate an URI from the
EntryID, which is unique and hopefully sufficiently stable.
ZarafaBridge: replace magic number with proper constant
ZarafaBridge: fetch Wastebasket ID
ZarafaBridge: remove unnecessary database write

Try to write as little as possible to the database, because it's
not guaranteed to work on a readonly public store.
ZarafaBridge: buildAddressBooks: use restrictions

Use table restrictions instead of looping over the result set.
ZarafaBridge: use restrictions in search query

This is how the Webapp does it.
ZarafaBridge: connect: optimize by using table restrictions

Avoid getting all data and then discarding parts of it in a loop, that's slow.
ZarafaBridge: getConnectedUserMailAddress(): add local cache

Speed up consequent lookups by keeping a local cache variable.
ZarafaCardDavBackend: GetCards: optimize

Use a restriction on the table query, and don't do a separate expensive lookup
on each card.
ZarafaCardDavBackend: getContactEntryId(): add local cache