Don't block forever on zero fds; fix List mis-use

Modify event.c to refuse to block on an empty epoll set because this would
just hang the engine forever - always.

From now on, we will call the Event Loop Self-destruction Detection
mechanism ELSD. This abbreviation is used in the added comment to
do_events().

Fix unlink_nodes() invocation in event.c. I should really somehow annotate
the list head to get compiler warnings when passing a list node instead of
list head to a function - if this error happens to _me_, who created that
interface, regularly.

BTW, this is the first commit from my new Gentoo installation. Basically, I
setup Gentoo and mounted my old /home to use it here. Works like a charm
(apart from the ancient software here - for those who are used to bleeding-
edge versions from Arch. I already compiled cmus from git and the old mutt
version really annoys me with warnings. I'll look into portage overlays and
grab as much git/svn sources as I can for my software ASAP).
Introduce Userevent API

User events are _not_ pipe-based (as one could have hoped from the TODO)
since this is just not necessary. Put it into crude words, using a pipe
is BS: data to the write end of the pipe will go through the kernel into
the _local_ read end and then read and dispatched by Event. Totally
pointless.

Calling send_event() currently employs the Postpone API to dispatch user
events at next event loop. This means that user events are also not directly
incorportated into ELSD, but indirectly, because they're postponed
functions. Eventually meaning that the engine won't shutdown as long as
there are pending user events.

Explain __init and __exit stages like runlevels in engine.h. Seriously,
those documentary texts ought to be under Documentation/ in the near future!