Add abstract base class MessageStore

which is a base class for all the *MessageStore classes,
as originally intended but for some reason never implemented.
Allow check_messages() to be passed an actual hash

instead of always reading an actual hash from a store.
This is about to useful for POP3 testing.
ServiceFactory can create pop3 services

Also, IMAPService::store_params() explicitly chains to SUPER
rather than re-implementing it all.
Avoid dereferencing undef in POP3MessageStore
Add regression test for Bug 3641
Ignore whiny gcov profiling messages harder

Some of the Sieve tests will fail if certain Cyrus utilities emit
anything on stderr.  When the gcov profiling atexit handler gets upset
and emits message like

profiling:.../imapd/lib/imparse.gcda:Merge mismatch for summaries

then the test spuriously fails.  There was already a hack to avoid this,
but it was tuned for messages from the ggcov-run runtime shim and wasn't
filtering out messages from the standard gcov library.  So, tweak the
filtering regexp a little.

This broke build http://ci.cyrusimap.org/job/cyrus-imapd-master/360/
Add --{no-,}keep-going options

Like make's equivalent, they control whether Cassandane stops
after the first test failure or keeps going and reports the
error later.  Default is --keep-going (unlike make).
More useful exception when Valgrind logs found.
Turn xlog's into test annotations

So test failure reports will include the complete set of xlog messages
emitted during that test.  This is so useful, I have no idea why I
didn't do it before.
More useful xlogs in check_message
Add sieve tests for duplication suppression
Expand the test names earlier in TestPlan

the first step in a cunning plan to run tests in parallel.
First cut at parallel test running

 - hardcoded to 2 worker children
 - listeners not proxied, so results go astray
Proxy exceptions out from Workers

so they're reported properly, i.e. once in the main process.
Add --jobs argument to testrunner.pl
Handle broken pipe when shutting down Workers

this was happening racily and causing the main process to die on SIGPIPE
before the test failure summary could be printed.
Combine WorkerPool::drain & receive

with a new flag indicating whether to block waiting for a Worker to
become idle.
Remove the output format listener in Workers

so that the '.' progress indicator is emitted only once, in the parent
process.
Don't try to freeze TestCases

the have references to up to Instances which are huge objects and
contain all sorts of stuff we can't, and don't want to, freeze/thaw.
Fortunately we have enough information in the parent process to just
pass the name back up the pipe.
Workers use different port ranges & basedirs

to avoid spurious test failures due to directories or ports unexpectedly
already existing.