Handle exceptions in lazy list block properly (propagate them to any thread which tries to realize list)
Don't spin while waiting for a lazy list node to be realized

Using a spinlock on each lazy list node works great if the block executes
quickly. Unfortunately, it works VERY VERY TERRIBLY BAD NO GOOD if the thread
running the block sleeps, or does I/O. In more concrete terms, it is incredibly
slow, hundreds or thousands of times slower than just using a mutex.

So, we use a condition queue (and associated mutex) to put the waiting threads to
sleep and wake them up when the node has been realized. Rather than the ponderous
memory footprint of a condition queue and mutex for *every node*, we make both of
them global. This means that if 2 threads are waiting for different nodes to be
realized, as soon as one is, both of them will wake up. But nothing bad will happen;
one of them will just discover that the node it is waiting for still isn't ready,
and it will go back to sleep again.
Added spec checking some multi-threading characteristics of List