Remove event set.
Rewrite message queue events.

Sacrificed empty-event.  It is not that useful anyway and was responsible for
scary race conditions in the event handling.  New output callback (now simply
called callback) has its message queue as argument.
Change event handling.

msg_queue_events now passes *this casted to its derived type as argument.

wq_msg_queue events remember the last passed argument and will pass it along
when the deferred event is actually invoked.
Initialize void-message-queue events before moving mq data.
Fix typo (too many commas).
Typo in workq-based event deactivation.
Update documentation to new event system.