User autocomplete: Add the class autocompletes-user for easier selecting later

This is nice because it means you can select/iterate all user
autocompleters using basic jQuery / CSS.

For the bespoke implementations, I add the class from JS so that if JS
doesn't run, the elements aren't tagged incorrectly.  That really only
matters if you're selecting elements with CSS (since your custom JS
won't be running either).
User autocomplete: Override the item render to conditionally use HTML from the server

Combined with the recent ModifySuggestion callback for
/Helpers/Autocomplete/Users, this lets customizers fully affect
rendering of the autocomplete suggestions.
Quote replies properly when re-wrapping

When re-wrapping text that already has email quoting, the
quoting should be maintained in the newly re-wrapped text.
See:

http://issues.bestpractical.com/Ticket/Display.html?id=16857
When wrapping, keep existing line breaks

When wrapping, honor existing line breaks and only wrap within
a line. This avoids combining intentional multi-line text into
a single paragraph.
Avoid "uninitialized" warnings when parsing empty templates

Empty templates are used to squash outgoing mail on a queue-by-queue
basis.
re-add attributes to fix IE layout

We still need border, cellspacing and cellpadding attributes to show the
collection list in IE (at least IE7) in the same layout as in other
browsers.

This partly reverts commit f5aa30c9.
Remove the IE-specific need for two <table> attributes on collection lists

The only reason IE padding was wonky without the cellpadding attribute
was because our stylesheet set up different padding for IE.  The blanket
padding is seemingly unnecessary.

The border="0" attribute is unnecessary since a border is set in CSS.

Only cellspacing is out of the reach of CSS in < IE8 because
border-spacing isn't supported.

Less hardcoded attributes in HTML means more flexibility for CSS down the
road.  While this is effectively a no-op commit in terms of rendering,
it's useful to avoid reinstating the two extra <table> attributes.
/Ticket/Graphs/ requires the GraphViz module; skip tests if not installed
Correct casing of MySQL
MySQL 4.0 is not supported on RT 4.0; MySQL 4.1 is the minimum required

Combines two conditionals into one since they can both assume the
MySQL version is >= 4.1.
Check InnoDB support via SHOW ENGINES for MySQL 5.6 compatibility

MySQL 5.6 (still in release candidate stage) drops the 'have_innodb'
variable in favor of SHOW ENGINES.  The latter is supported since 4.1,
so we can safely use it across the board.

In my testing on 5.1, I never saw "disabled" when disabling InnoDB via
'skip-innodb'.  SHOW ENGINES always reported "no" despite the engine
being disabled at runtime not compile time.  Hint at this possibility in
the error message for "no".
extract Transaction->QuoteHeader method

Code that is adding "On <date> <person> wrote:" in front of
quoted context is burried in other method, so it's hard to
change style of the quoting. Extract it into a new method.
parse cf date in user's timezone to make it right for strings like "today", "tomorrow", etc
localize built-in component/search names

user's saved searches won't be affected.
see also #21377
Make subject tag be non-greedy, to not match all of "[comment] [foo #1]"
don't create DB if we run perl -c on a test file
Instantiate new sessions on logout as well as deleting the old one

Although the stored session is deleted by tied(%session)->delete, the
tied object and all data still remains present in memory.  When %session
goes out of scope at the end of the request, the Apache::Session DESTROY
block attempts to save the session one last time.  On database session
stores (MySQL and Pg), the update silently fails because the row has
been deleted (and no error checking is done).  When using
Apache::Session::File, however, session updates autovivify the file,
essentially reverting the deletion.  The autovivified session contained
an empty current user, since the CU is replaced after the delete, but
all other user-specific session data still existed and was in the
session of the unauthenticated client.  This lead to incorrect behaviour
in extensions outside of core RT.

The old session id in the client's cookie is now immediately replaced
with a new session id.  Previously it was replaced it on the very next
request (meta-refresh to the login page) when the old id could not be
loaded.  Under Apache::Session::File, the old session was not replaced
at all until a successful login.
Instantiate a new session if the session doesn't match the ID we loaded it by

The replaced code was a no-op since the refactor in 64f65d8.  Before the
64f65d8, deleting from the parsed cookie data was enough to set a new
cookie.  The new cookie contained the found session id, regardless of if
it matched the loaded session id.

A safer, more conservative approach is to abandon the old session and
force a new one if the session cookie value loads a session with a
different id.  This should never happen but indicates corrupt session
data or malicious activity if it does.  There is no harm in the extra
protection.
tests for /Admin/User/GnuPG.html
Add a callback for modifying the displayed queues on the quicksearch prefs

This also lets the callback skip the ShowTicket rights check or specify
a different right.