Create eventset.

An eventset is a collection of events, addressed by their index.
At most one event can be running at any given moment.
If an event callback is altered during it running, the running event
will be kept alive until it completes, while the new event will run
immediately after.

Eventset can be given an initially active event on construction,
which defaults to none.

Changed message queue to use eventset for its event management.