Use MVars for exchanger instead of mutexes and conditions.

@mighe have you considered using some of our higher level primitives to build on for your Exchanger? It's simpler - less code to maintain, we don't have to implement our own wait operation, we get the dereference options for free, and if we optimise MVar for specific Rubies, you'll get the benefit of those optimisations in your Exchanger.