Deliver to UI

Adds a method to deliver a signal's events to the main thread, doing so immediately if possible (as discussed in #1402). I don't attempt to drain multiple events immediately. Any further events created recursively or concurrently are enqueued to be delivered later.
Can this be moved onto the line above?