Hack around URI.extract() to handle non-urlencoded URIs
Fix handling of URIs followed by several exclamation marks
Use Addressable gem for parsing in URL

This is necessary to handle urls with non-ascii characters,
that are no longer filtered out thanks to previous hacks.
Eventually it will help to extend support to proper IRIs.
Tune extracting heuristic in URL

This should better handle parenteses and
other non-ascii URI corner-cases.
Escape bot nick in IRCMessage regexps
Allow full-width ASCII in IRCMessage.bot_command

Now full-width ASCII characters in bot_command
are automagically converted to their regular analogs.
Moreover, space after command is no longer necessary,
any first non-ASCII char now delineates command border.

Side effect is that now bot_command and tail are parsed eagerly.

This contradicts the goal of command_prefix field of
allowing per-channel command char, but that can be fixed later.
Allow plugin load customization in IRCPluginManager
Remove DaijirinEntry.to_s, which hindered debugging
Catch all exceptions in IRCPluginManager
Reuse timezone-based proc for .jtime in Clock
Add missing language jmarks for EDICT
Change to single quotes for literals in EDICT
Add codepoint hex output in Unicode
Add codepoint description url output in Unicode
Fix .short to use Addressable gem in URI
Clean up code style in Seen plugin
Fix NPE for empty nick in Seen
Add .seenwhile command in Seen plugin
Guard against unloaded plugin access bugs in Loader
Improve IRCBot's listener structure

Split IRCLoginListener into several listeners,
 managing separate login tasks, like
CAP extension querying, server password setting, etc.

NickServ identification is now separate from
irc username setting. It now can take
custom account name, password, service name,
and custom invitation and confirmation regexps.

If invitation regexp is not specified, bot will
send identify string immediately upon connection.

If invitation regexp is specified, bot will respond to
invitations throughout all connection, not only during login,
because server can lose identification and resend invitation.

If confirmation regexp is not specified, bot will
not wait before proceeding with connection.
It may lead, e.g. to joining channels before being authenticated,
which either will fail (for channels which accept only registered users),
or will show bot's ip/host to everyone in the channels
(if host-cloak is granted only for registered users).