unexpunge: flag the restored messages with a named user flag
unexpunge: copy per-user annotations
index: calculate keyword mapping later

This means that searchargs can now be parsed without an index open.
Stop pretending index_calcsearchflags can fail
Make index_calcsearchflags recursive

so that

   NOT KEYWORD $Foo

and

   OR KEYWORD $Foo KEYWORD $Bar

will work.
status: zero out statusdata to avoid missing data bug
Fix some compile warnings.
util: add buf_findline()
Rip out sphinxmgr, use a single searchd

This reverts almost all the work done on sphinxmgr, removes the
sphinxmgr executable, and all the sphinx-related code paths which go
through sphinxmgr.  The code now assumes that there is a single searchd
running per Cyrus instance, with one index configured per user.

This design has the following advantages:

 * We can use the existing on-disk data without re-indexing, which
   will help us deploy faster.

 * We get a single searchd per slot and no complex state machine
   for starting and stopping searchds, and far less exposure to
   start-time performace issues and bugs in searchd.

 * Each user is their own index in their own directory, and so
   can be moved between servers using a simple rsync.

 * We get some measure of inter-user isolation for safety; if
   one index is corrupted we only have to re-index a single user.

 * The per-index lock inside searchd doesn't become a scaling
   limitation, as it would if we used a single index (although
   we could also have sharded to achieve this).

 * We now avoid the problem where the socket name for the per-user
   searchd could exceed the 100 byte limit of a sockaddr_un for only
   moderately long usernames.  There is only a single socket per
   slot, {configdirectory}/socket/sphinx.

It does mean however that we need to dynamically add indexes to a
running searchd - fortunately it supports that by allowing us to rewrite
its config file and send it SIGHUP.  Indexing is now entirely done
through SphinxQL, just like before the fmindex detour.  We do need one
small bugfix in searchd (patch sphinx-handle-new-rt-index-on-sighup) but
all that hacky fmindex work can go away now.

Adding a new RT index at runtime pauses all incoming connections until
the new index is loaded.  Existing connections proceed but cannot use
the new index.  We need some stress testing to work out if this is a
problem.
Fix some more compile warnings.
squatter: add '-c run' option

which is designed to be run from a Cyrus master START section
to start a searchd for the slot and, even more importantly,
automatically to shut it down again when the slot is shut down.
squatter: fix startup race with -c run
gnb review: add sortcache_db option
gnb review: lift sortcache_db call up a layer

NOTE: this means it gets created BEFORE _load, but that's OK
because we're about to write to it anyway
gnb review: add version string to sortcache keys

It's in the key rather than the value because it fits the cleanup
paradigm nicely this way.
gnb review: ensure nmsgs and nfolders match data

If we fail, we syslog and fail the cache read.  No real harm done,
it will run the search and overwrite the bogus record.
gnb review: describe single-folder optimisation

(also correct logic - it's AND, not OR, so only optimise where a
 single folder is named)
dlist_splat: replace a node with its children

If the node is a list, it just replaces it with its children.
If it's any other type of node, it just gets removed - exactly
like an empty list.
gnb review - format_search - bracket groups of multiple commands
gnb review - simplify index_format_sort