The difference with `domain.run` here is subtle, but I *think* it is safer. A potential problem with splitting up `domain.enter()` and `domain.exit()` across ticks it that it can lead to the internal `Domain._stack` getting out of whack (if not whack, at least unnecessarily large).

I ran an ad hoc load test with some logging to print `Domain._stack` at `domain.exit()` and observed that the split enter/exit case had some "odd" looking stacks compared to `run`: larger, duplicate entries, and `exit` wiping out more entries than I expected. I didn't observe any errors, but it doesn't *look* safe compared to `run`. All very non-scientific, I know, but I don't have enough time to be thorough at the moment.

Regarding `next()` here, neither the existing enter/exit nor `run` will cover it. 

TLDR; This change is better because it keeps `Domain._stack` cleaner and possibly safer.

I'm not a domain expert, so please be skeptical, but I think this is worth another look.