Add camel_imapx_list_response_get_oldname().

Convenience function returns the value of the "OLDNAME" extended data
item, or NULL if no such extended data item is present.
Add camel_imapx_folder_copy_message_map().

Returns a GSequence of 32-bit integers representing the locally cached
mapping of message sequence numbers to unique identifiers.
Add CamelIMAPXNamespace.

Encapsulates an IMAP namespace, which consists of a namespace category
(personal/other users/shared), a mailbox prefix string, and a mailbox
separator character.
Add CamelIMAPXNamespaceResponse.

Encapsulates an IMAP NAMESPACE response, which consists of a set of
CamelIMAPXNamespace objects group by CamelIMAPXNamespaceCategory.

This will replace CamelIMAPXNamespaceList and related functions.
Add CamelIMAPXMailbox.

CamelIMAPXMailbox models the current state of an IMAP mailbox as
accumulated from untagged IMAP server responses in the current session.
CamelIMAPXFolder: Add a "mailbox" property.

Holds a weak reference to the corresponding CamelIMAPXMailbox for the
duration of the IMAP server connection.

New functions:

  camel_imapx_folder_ref_mailbox()
  camel_imapx_folder_set_mailbox()
CamelIMAPXServer: Add new namespace and mailbox APIs.

CamelIMAPXMailbox and CamelIMAPXNamespace are closely intertwined, so
the containing data structures for them need to be introduced together.

This commit does so, and populates the data structures in memory from
untagged server responses.  It also adds CamelIMAPXServer API to access
or query the data structures.

All of this is so far unutilized.  Actually integrating these APIs into
the other parts of IMAPX will take place in subsequent commits.

New functions:

  camel_imapx_server_ref_namespaces()
  camel_imapx_server_ref_mailbox()
  camel_imapx_server_ref_selected()
  camel_imapx_server_list_mailboxes()

Removed functions:

  imapx_parse_namespace_list()
CamelIMAPXFolder: Add camel_imapx_folder_list_mailbox().

Ensures that a folder's "mailbox" property is set, going so far as to
issue a LIST command if necessary (but should be a rarely needed last
resort).

Note the LIST command part of the function is currently unfinished.
Need to rework LIST command handling in CamelIMAPXServer first.
CamelIMAPXStore: Rough in handlers for CamelIMAPXServer signals.
CamelIMAPXStore: Add imapx_store_add_mailbox_to_folder().

Called in response to CamelIMAPXServer::mailbox-created signals.
CamelIMAPXStore: Add imapx_store_process_mailbox_attributes().

Processes a CamelIMAPXMailbox by adding relevant information to the
CamelStoreSummary, and emitting the appropriate CamelStore signals.
CamelIMAPXStore: Add imapx_store_process_mailbox_status().

Processes a CamelIMAPXMailbox by adding relevant information to the
CamelIMAPXFolder, and invalidating the local cache if a UIDVALIDITY
change is detected.
CamelIMAPXCommand: Replace '%f' format character with '%M'.

Whereas '%f' took a CamelFolder argument and had to be converted to an
IMAP mailbox name (with the correct separator character), '%M' takes a
CamelIMAPXMailbox which already has the IMAP mailbox name.
CamelIMAPXCommand: Add '%m' format character for mailbox names.

New format character '%m' for UTF-8 mailbox names.  Intended only
for CREATE and RENAME commands which take a user-provided mailbox
name.  Always prefer '%M' if a CamelIMAPXMailbox is available.
CamelIMAPXServer: Convert API to CamelIMAPXMailbox.

Convert CamelIMAPXServer to primarily use CamelIMAPXMailbox instead of
CamelIMAPXFolder, the idea being to keep all the Camel-specific policy
and limitations relegated to CamelIMAPXStore and CamelIMAPXFolder, and
just have CamelIMAPXServer be a pure IMAP client implementation.

This is a huge commit which I don't like doing, but CamelIMAPXServer,
CamelIMAPXCommand and CamelIMAPXJob are so tightly intertwined that I
was unable to split this into smaller steps.

Added functions:

  camel_imapx_command_ref_mailbox()
  camel_imapx_job_has_mailbox()
  camel_imapx_job_ref_mailbox()
  camel_imapx_job_set_mailbox()
  camel_imapx_server_create_mailbox()
  camel_imapx_server_delete_mailbox()
  camel_imapx_server_rename_mailbox()
  camel_imapx_server_subscribe_mailbox()
  camel_imapx_server_unsubscribe_mailbox()

Removed functions:

  camel_imapx_job_has_folder()
  camel_imapx_job_ref_folder()
  camel_imapx_job_set_mailbox()
  camel_imapx_server_manage_subscription()
  camel_imapx_server_create_folder()
  camel_imapx_server_delete_folder()
  camel_imapx_server_rename_folder()

Modified function signatures:

  camel_imapx_command_new()
  camel_imapx_job_matches()
  camel_imapx_server_refresh_info()
  camel_imapx_server_sync_changes()
  camel_imapx_server_expunge()
  camel_imapx_server_fetch_messages()
  camel_imapx_server_noop()
  camel_imapx_server_get_message()
  camel_imapx_server_copy_message()
  camel_imapx_server_append_message()
  camel_imapx_server_sync_message()
  camel_imapx_server_manage_subscription()
  camel_imapx_server_update_quota_info()
  camel_imapx_server_uid_search()
  imapx_parse_status()
CamelIMAPXServer: Emit mailbox-select/mailbox-closed signals.
Rework camel_imapx_server_list().

Repurpose camel_imapx_server_list() to create/update CamelIMAPXMailbox
instances within CamelIMAPXServer.  This function no longer returns an
array of CamelIMAPXListResponses, but simply a success/failure boolean.

Also, this function no longer takes an extension string parameter.  If
the server names "LIST-EXTENDED" in its CAPABILITY response, then this
function automatically issues an extended LIST command:

    LIST "" $PATTERN RETURN (CHILDREN SUBSCRIBED)

Otherwise it issues a LIST command followed by an LSUB command:

    LIST "" $PATTERN
    LSUB "" $PATTERN

After camel_imapx_server_list() returns, the caller can then pass the
same $PATTERN string to camel_imapx_server_list_mailboxes() to obtain
an up-to-date list of CamelIMAPXMailbox instances that match $PATTERN.

Also as part of this, we now explicitly only list mailboxes in personal
namespaces.  Listing mailboxes in shared or other users namespaces is a
future enhancement since CamelStore does not yet have a suitable API to
support this properly.
CamelIMAPXStore: Simplify get_folder_info_offline().

Forget about namespaces when offline and just match folder paths.
CamelIMAPXFolder: Finish camel_imapx_folder_list_mailbox().

Implement the part where we actually issue the LIST command.
CamelIMAPXServer: LIST a mailbox after creating it.

Listing the mailbox will trigger our untagged LIST handler.  This
simulates being notified of a newly-created mailbox, so we can just
let the callback functions handle the bookkeeping.