When aileron was copied from web2, old unread-messages styling lingered

This removes the square box with borders behind the "New Messages" box
which looks weirdly out of place on 4.0.  What's happening is that the
'box' on web2 is becoming a weird background box to the new title box css
showing up in aileron.
Make links in the "New Messages" popup show as links

Without this, it's really not obvious (unless you hover, or know) that
there are two embedded links you can click on.  Putting it in base/ so
that it works on aileron and web2.
Use cached attribute list when fetching preferences

Attributes have, since their initial implementation, use
LoadByNameAndObject.  However, when the user does not have any
preferences stored, this can be very expensive, as
DBIx::SearchBuilder::Record::Cachable does not cache negative results --
that is, that the matching Attribute row does not exist.  This means
that every request for RT->Config->Get( '...', $session{CurrentUser})
results in an identical database query.

Use the ->Attributes method, which caches the set of user attributes.
This, in itself, is not sufficient to cause the preferences to be
cached; the the next commit.
Cache Attributes on the CurrentUser object, not an ephemeral User object

The previous commit moved preferences to using the Attributes cache;
however, this gains little because the cache is on the User object
derived from the CurrentUser, which is derived afresh each time that
RT->Config->Get() is called.

Call the ->Preferences method directly on the CurrentUser, instead of
the desrived User, so the cache is on the more durable CurrentUser
object.  The cache is cleared (via ->ClearAttributes) during the ->Load
call at the start of every request.  ->DeletePreferences is also
switched to use ->DeleteAttribute, which explicitly purges the cache;
otherwise, it may return stale data.

This better attribute caching ensures that even negative preferences
loads are cached for the duration of the request.  This, in turn,
eliminates a large number of repeated database queries (such as for the
username format preference) for users with no explicit preferences set.
typo in approvals.pod - s/you/your/
Don't ask for every field if you only want seven

When 'rt ls' is run in prettyprint mode (the default with no additional
arguments, or no specified fields), it flips on the long format, which
goes and gets a ton of fields, including, all the custom fields on each
ticket. If you have a lot of open tickets, this adds up to extra data
fetches and extra data over the wire which is then thrown away by
prettyprint().

Additionally, this is terribler on RTIR, which has some slow ACL checks
around custom fields and Queues, and the long format gets all the CFs
for each ticket. There is caching, but clearly it's not enough if you
have 100 open tickets. Relevant commits from rtir.git:1f5fb2a9 but that
cache still isn't enough. We'll do more digging in RTIR, but this takes
a list of a 100 RTIR tickets from minutes to 2 seconds.
fix transposition of vowels
Add a blacklist for DBD::Pg 3.3.0, which breaks UTF-8 handling

Per I#30232.  This blacklist will be removed in a future release, likely
replaced by a dependency bump of DBIx::SearchBuilder for PostgreSQL
deployments.
Merge branch '4.0.21-releng' into 4.0-trunk
Correct the documentation on where shredder puts SQL dumps by default

Because of the «from_storage => 0» passed to AddDumpPlugin, the path is
chosen to be relative, not inside of /opt/rt4/var/data/RT-Shredder/

Fixes I#19167
Expose DisplayPath in ShowUpdateStatus

RTIR uses this to show the Unread Status on Incidents/IRs/etc
but RTIR tickets live in /RTIR/Display.html.  This linked to
/Ticket/Display.html?id=7#txn-id but we couldn't get and retain the
txn-id easily during the redirect to /RTIR/Display.html.  Instead, let
RTIR or another extension change where the link points on certain
tickets.

Part of the solution for issues #17450
Merge branch '4.0/shredder-sqldump-path' into 4.0-trunk
Add a useful index for shredding users

Suggested by Christian Loos <cloos@netcologne.de>
Use explicit AdminUsers check in SetPrivateKey, not _Accessible

8ce033b3's addition of it to _Accessible was to leverage the code in
->CurrentUserCanModify, which is called by SetPrivateKey.  The presence
of PrivateKey in _Accessible leads to problems in other code (such as
rt-dump-metadata) which assumes that _Accessible only contains true
columns.

Switch to an explicit ACL check in SetPrivateKey rather than inserting
into _Accessible and relying on CurrentUserCanModify.

Fixes I#22465.
fill the date cf inputs when creating tickets/txns

so they don't get missed when user clicks "add more files" or something like that.
Add tests showing date CF value is lost on add attachment submit
Merge branch '4.0/keep-date-cf-value-on-create' into 4.0-trunk
Merge branch '4.0/unread-message-styling' into 4.0-trunk
Merge branch '4.0/updatestatus-displaypath' into 4.0-trunk
Merge branch '4.0/bin-rt-ls-too-much' into 4.0-trunk