Bugfix in join/leave flow.

On successfully joining a room, the current room (if present)
will be left and *then* room.current will be changed.

But the leaveRoom() function will put us in prejoin mode when
leaving a room that matches room.current. So it needs to be
executed *after* room.current has been changed.
Fix the autoJoin feature.

Now that rooms can no longer be joined before cadence knows
that they exist, automatic joining requires a discoverRooms()
call before joinRoom() can be called.
Nicer strings; include nick in conflict error.
Put all nicks through a formatter before output.

The length-limiting, plaintext-filtering, space
unescaping is now in a separate function that's
called on all nicks in info messages.
Print an error when /list has no results.
Rewrite formatText with formatting types.

All variables passed to formatText now have a type, which is
either their name or (for multiple variables of the same type)
a dotted prefix. A variable named {type} or {type.x} will be
passed through visual.format.type() before output.

The default type is "plain", which escapes all markup.

Rendered variables are typed as "raw", which will bypass the
filter and print them directly.