Tell: Use new irc handlers (also rewrite rationale)
Tell: Use new irc handlers (also rewrite rationale)

This was the main instigator of my rewrite of the IRC event handling. It
dawned on me that there wasn't an easy way to associate IRC event
handlers with the queue of the triggers (if they asked for one), thus
making it very difficult to ensure both triggers and IRC events were
raised on the same thread.

So if someone declared (some) of their triggers with Queue threading it
would open them up to potentially unexpected multithreading if they also
had some IRC event handlers. By having plugins declare their event
handlers as a field it allows us to provide certain guarantees.

This rewrite has made IRC event handling more complicated (but also
more powerful) and more obtuse. The latter is especially bad for
potential plugin writers, since it's not immediate which classes/
interfaces are accepted IRC events. The former is mostly due to the
limitations of the C♯ type system, forcing us to work around it.

IvionSauce/MeidoBot