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).
Move UserPool into IRCBot as IRCUserLisener

All search requests from plugins are handled
through Message.bot field.
Clean up IRCUserListener a bit
Prevent passwords from being shown in IRCBot logs
Improve log format and code style in IRCBot
Add generic permission-checking API to Router
Implement DCC plugin
Add checks for 'can_use_dcc_chat' to DCC