channel: Move mch_exit(0) call to a non-deferred event handler

Since `mch_exit` will re-enter event_poll, it is necessary to call it outside
libuv event loop.