Cross thread reactor notifications

Allow sending messages to the reactor from different threads, waking up
the reactor if needed. Messages are processed by Handler::notify().

Resolves #8