Concurrent read, sequential write variables. Comparable to an IORef with
more advanced synchronization mechanisms. The value stored inside the RWVar
can be read and used by multiple threads at the same time. Concurrent
computations inside a with "block" observe the same value.

Observing and changing the contents of an RWVar are mutually
exclusive. The with function will block if modify is active and
vice-versa. Furthermore with is fully sequential and will also
block on concurrent calls of modify.

All functions are exception safe. Throwing asynchronous exceptions will not
compromise the internal state of an RWVar. This also means that threads
blocking on with or modify and friends can still be unblocked by throwing
an asynchronous exception.

This module is designed to be imported qualified. We suggest importing it
like: