Recent channel users: Rework the way we keep recent user info.

This commit changes circe-channel-recent-users to store copies of
the user hashes from circe-channel-users while those users are not
present. On re-join, the user info is copied back, just with a few
fields overridden.

Additionally, this is now correctly split up. The management of
those two hashes happens in `circe-channel-message-handler`, while
the decision on what to display or not happens in the display
handlers.

Related changes:

- circe-parted-users-timeout renamed to circe-channel-recent-users-timeout
- circe-format-channel-rejoin now has a user@host mask (fixes #47)
tracking-mode: Use appropriate place in the mode line.

The old code uses `mode-line-modes`, which is the right place
visually, but the wrong place semantically. The new code tries
to be a bit clearer and also allows users to remove the mode
display from the mode line without getting rid of tracking.

Fixes #48
tracking-shorten: use 'shorten-strings' from shorten.el

shorten.el is a new string shortening library which provides
component-wise string shortening, which, by breaking strings into parts,
and shortening the parts in a tree-walk algorithm, can often shorten
strings more than the simple prefix shortener it replaces.  It can also be
configured to shorten better than a simple prefix shortener in every case
by dropping unnecessary tail-position parts, as well as many other
possibilities.

This addresses issue #49.
shorten.el: add URL header
build.sh: release clause for shorten.el
build.sh: Deal with dependencies for single-file packages.
circe-format-server-rejoin: Document more format parameters.

These were added in the recent rewrite, but not documented in this
docstring.
circe-channel-rename-user: Rewrite to be more clear.

The previous implementation had some weird corner cases which I
did not understand, the new implementation should be a lot more clear.
The function should also only be called in channels where the renaming
user is actually present.

Also remove the outdated change to user info in display-NICK.
shorten.el: two renames

Rename the function `shorten-join-function' to `shorten-join', and the
function `shorten-split-function' to `shorten-split'.  This simplifies the
help display of the variables by those names in some circumstances, and is
generally better labeling.
shorten.el: a rename

Renamed the procedure shorten-validate-component-function to
shorten-validate-component, for purposes of a more concise help display in
some cases, and general good practice.
tracking-mode: correct a call to 'error'
lui-logging-enqueue: eliminate runtime dependency on cl.el

Addresses issue #51
XEmacs: Remove support.

Sorry, but we have no one who uses XEmacs, and the two Emacsen
have diverged quite a bit. A number of recent changes depend on
Emacs 24 features, and we already have trouble maintaining
compatibility with earlier 24s, much less 23.
shorten-tests.el: update for recent changes to shorten.el
circe-display-NICK: Display a message on nick regain.

When a lurker joins and then changes their nick to one which had
recently left the channel, the nick change should be displayed, as the
new user will inherit the settings of the old nick.

This is not 100% accurate, as a user can quit and then another
occupies the nick. But as long as we don't attach authorization
information to the nick info, this should be an sufficient heuristic.
circe-channel-user-nick-regain-p: New function.

This is used in two different places to make it clear that a heuristic
is used there. The new implementation does not really improve
the heuristic, just improves readability, but we might improve it later
on.
circe-channel-rename-user: Handle another case for activity.

When the recently-parted nick wasn't active, but the old nick
was, copy the last-active value, too.
tracking-shorten: preserve faces on shortened forms!
tracking-tests.el: correct a comment
circe-reconnect: Do one "reconnect" for max-reconnect-attempts 0

As this function is used for the initial connect, reconnect-attempts 0
means we get to do one still.