When switching stacks via coroutine_transfer in the M:N threading information, we need to tell ASAN about it in the same way that we do in cont.c. This is a matter of calling __sanitizer_start_switch_fiber in the transferring M:N thread, and then calling __sanitizer_finish_switch_fiber in the transferred-to M:N thread.
In a similar way to how we do it with fibers in cont.c, we need to call
__sanitize_start_switch_fiber and __sanitize_finish_switch_fiber around
the call to coroutine_transfer to let ASAN save & restore the fake stack
pointer.
When a M:N thread is exiting, we pass to_dead to the new
coroutine_transfer0 function, so that we can pass NULL for saving the
stack pointer. This signals to ASAN that the fake stack can be freed
(otherwise it would be leaked)