Bug 701838 - Work around a semantic API break in GObject

Recent versions of GObject fire critical messages if properties are
installed outside of class initializers (causing all of EDS tests to
fail).  This patch adds some class data and initializes the class in
the dynamic subclass initializer.

Note that the class data which should normally be freed in the class
finalizer is not freed, since it is a static type the finalizer will
never run (and GLib also takes the liberty of firing critical messages
for specifying a class finalizer).
Added EAlphabetIndex

A private accessory used internally by ECollator to implement AlphabeticIndex
features. This is in a separate file since we need to use C++ APIs to use
the AlphabeticIndex, so we compile it into a separate archive to be statically
linked in with libedataserver.la.
ECollator: Use the private EAlphabetIndex

ECollator now exports 3 new APIs:

  o e_collator_get_index_labels()

    List the alphabet for the given locale

  o e_collator_get_index()

    Determine what position in the alphabet a given word belongs

  o e_collator_generate_key_for_index()

    Generate a sort key for an index (to sort between letters).

Also the ECollator now uses the alphabet index to generate sort
key prefixes, e_collator_collate() simplified to simply compare
two sort keys, this ensures the output is always the same without
duplicating the alphabet index logic in the collate function.
Added ECollator to the libedataserver gtk-doc build.
Added e-collator-test.c

A test case testing basic ECollator features.
Fixed existing cursor tests for POSIX locale to work with Alphabetic Indexing

Now that sort keys are prefixed with the alphabetic index, POSIX sorting has
changed to adhere to the alphabetic index.
Added ETransliteratorPrivate C++ Glue

Added this glue to call icu::Transliterator C++ APIs on behalf
of ECollator.
ECollator: Use transliterator for Chinese locales.
e-collator-test: Add special case tests for Chinese sorting.

Check that chinese words are sorted in the same buckets as
Latin charachter names in an A-Z alphabetic index.
EBookBackendSqliteDB: Added new API to set cursor target.

Removed e_book_backend_sqlitedb_cursor_set_target() and
e_book_backend_sqlitedb_cursor_set_targetv() as they were not
really useful, added new API:
   e_book_backend_sqlitedb_cursor_set_target_alphabetic_index()

To set the cursor target by alphabetic index, also added
e_book_backend_sqlitedb_ref_collator() to get a hold of the active
collator which can be used to list the active alphabet attributes.
Fixed test cases to use the new API for setting alphabetic index targets.

Use e_book_backend_sqlitedb_cursor_set_target_alphabetic_index() instead
of e_book_backend_sqlitedb_cursor_set_target() (which is now removed).
EBookBackendSqliteDB: Add new APIs to the gtk-doc build (mainly cursor related APIs)
EBookBackendSqliteDB: Cursor API change.

Removed e_book_backend_sqlite_cursor_set_target_contact() and added
an enumeration parameter to e_book_backend_sqlitedb_cursor_move_by()

Moving the cursor now has 3 possible "origins":

  o EBSDB_CURSOR_ORIGIN_CURRENT: Fetch results and move from the current
                                 cursor position

  o EBSDB_CURSOR_ORIGIN_PREVIOUS: Fetch results and move from the previous
                                  cursor position, practical for refreshing
                                  a result set after the addressbook changes

  o EBSDB_CURSOR_ORIGIN_RESET: Fetch results from the beginning (or end,
                               if moving backwards through results).

To achieve the EBSDB_CURSOR_ORIGIN_PREVIOUS origin, the cursor now
holds on to two cursor states at all times (the current cursor state
and previous cursor state).
EBookBackendSqliteDB Cursor tests updated.

Updated cursor tests for the new _move_by() API and removal
of the _set_target_contact() API.
Updated gtk-doc build for new API changes in EBookBackendSqliteDB cursor APIs.
Added tests to ensure descending order works properly with the Cursor API.
EBookBackendSqliteDB: Changed cursor move_by() API

e_book_backend_sqlitedb_cursor_move_by() now takes a 'GSList **results'
argument to report results and returns a boolean success status.

This allows one to pass NULL for the results and ignore the results.
EBookBackendSqliteDB: Fixed a nasty bug causing descending order to not work properly in some cases.
Fixed cursor tests to use the new _move_by() API.
Adding email field to default addressbook configuration.