Allow duplicate IDs to be stored in Ids object

Would be needed if, for example, we were processing multiple EXPUNGE
requests at once.

Rarely will be used so we can bury the configuration option (no need to
make it a part of the constructor, for example).
[mms] Fix handling message sequence number actions returned from server when using CONDSTORE/QRESYNC.

[mms] Now that we have accurate sequence numbers for our cached values, we can utilize the known UID set parameter to a QRESYNC EXAMINE/SELECT command.
[mms] Correctly handle FETCH results intermingled with EXPUNGE/VANISHED requests within a single request.
[mms] Add support for IMAP MOVE command.

Although not yet an RFC standard, at last count over 11 servers
support (including Dovecot and Cyrus).  A big performance win wrapping
three distinct commands (and their corresponding cache writes) into a
single, atomic command.

Also, the main reason that I discovered our IMAP parsing was lacking in
some ways.  This command may cause things like COPYUIDs, FETCHs, and
EXPUNGE untagged responses to all appear in the same command. Thus, we
need to handle each of these untagged responses as they come up, rather
than relying on a specific command call to deal with these commands
after the parent command is done.

It also highlights the vagaries of QRESYNC, which require the client to
continue to process message sequence numbers as there is no guarantee
that VANISHED responses will be sent (theoretically, VANISHED and
EXPUNGE responses could be sent in the same untagged sequence - it is
critical for a client to be able to handle this sort of output).

Now that our underlying handling has been fixed, the MOVE command is
trivial to implement, as it should be, since it is nothing more than a
pseudo-macro of three existing IMAP commands (COPY - STORE - EXPUNGE).
Cleanups/fixes for POP3 driver

Don't throw error if flags are not supported - documentation indicates
that the return value will simply be empty for these elements.
Merge branch 'master' into imap_client_move

Conflicts:
	framework/Imap_Client/lib/Horde/Imap/Client/Base.php
	framework/Imap_Client/lib/Horde/Imap/Client/Socket.php
Improved saving of cache data
Revert check for non-array in this branch

Can verify that there is only 1 place we call this method in the code,
and this one place is guaranteed to provide an array.  That's what the
API says, so that's what you must give the method.
[mms] Improved handling of server write errors in the Socket driver.
Call this reset(), because it may do more than resetting status data
Another place to flush our pending FETCH cache
Fix LASTMODSEQ/LASTMODSEQUIDS behavior
Merge branch 'master' into imap_client_move

Conflicts:
	framework/Imap_Client/lib/Horde/Imap/Client/Base.php
	framework/Imap_Client/lib/Horde/Imap/Client/Ids.php
	framework/Imap_Client/lib/Horde/Imap/Client/Socket.php
	framework/Imap_Client/package.xml
Fix accessing a non-object.
Optimize FETCHs with the changedsince option

Get rid of unnecessary CHANGEDSINCE only fetch. Just do a regular query
and only merge in cached results for matching entries.
Rethink message sequence storage

After further reading, thinking, and discussion with experts on the
subject, have come to the conclusion that we gain almost nothing by
trying to maintain a sequence number -> UID storage mapping across
sessions. Almost everything can be done via UIDs only and, in the
rare instance where message sequences are needed, we can do workarounds.
The maintenance of the mapping table most likely far outweighs the cost
of doing these rare additional server requests (which are generally
nothing more than simple UID ALL searches of the mailbox, which are not
difficult to parse and most IMAP servers should be able to
quickly/easily generate).
Correctly save MODSEQs when there is no FETCH cache request
More stuff not needed with LASTMODSEQUIDs change
Re-add caching of flag change information on sync
Merge branch 'master' into imap_client_move

Conflicts:
	framework/Imap_Client/lib/Horde/Imap/Client/Socket.php
	framework/Imap_Client/package.xml
This proposal is dead