Move plugin code to the module
Change plugin API: initialize plugins in their load() functions

This makes the whole plugin initialization more flexible; plugins are
free to do anything with the bot object. However, it might be a good
idea to pass a specially crafted view/context/interface instead, but
right now I don't what needs to be exposed so I decided to pass the
complete bot object.

It goes without saying that the plugin API will have backward
incompatible changes in the future, but hey, we are in the development
phase right now.
Remove unused import
Add support for registering IRC message listeners from plugins
Add support for filtering RX callback by command and prefix
Get an empty set if there is not any callbacks for the message
Rename functions and variables: use term botcmd instead of command

Just for the sake of clarity.
Clarify the distinction between IRC commands and bot commands
Call IRC RX callbacks in the same order they are added
Use IRC RX callbacks also for PING, 0001, ERROR and PRIVMSG
Refactor: split recv_ircmsgs() to two pieces

Fix recv_ircmsgs() to just iterate the input buffer and then call
recv_ircmsg() for each completely received message.
plugins/topic: simple plugin for logging topics
Refactor: inline internal function call
Make send_ircmsg() public
Reply to the source of the PRIVMSG instead of the channel we camp

The source is the channel currently, but it might be something else in
the future if add support for multiple channels and/or private
conversations.
Make admin_check() public
Make Bot.nick a readonly property
Use RX callbacks to handle PING/PONG
Use RX callbacks to handle ERROR
Use RX callback to handle 001