Replace `erlang yield' with `receive after'

Erlang yield lets other processes get a chance to execute.
This means that if other processes have a chance to run
in another scheduler thread anyway, we don't wait for
them. But what we want to do instead is actually wait
for them to send any uninstrumented message
(hence use receive after instead which blocks us).