Implement Stream using Atomic (rather than mutexes)
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
Add another explanatory comment to Stream#target
Added Vector#transpose
List#each, #map, #flat_map, #take_while, #drop_while, #each_chunk return Enumerator if called with no block

This corresponds with the behavior of core Ruby collections from Ruby 1.9 onwards.
Small tweaks/refactorings to internals of Vector
Added Vector#slice. #[] can take index,count or a range (just like Array)
Optimize Set#first for speed
Remove unnecessary level of nesting in Vector#flatten_range
SortedSet#each returns an Enumerator if called with no block, self if called with block
Added SortedSet#reverse_each
Added Vector#delete
Performance enhancement to Set.new
Reordered method definitions in SortedSet
Added SortedSet#clear
Added SortedSet#subset?, #superset?, #proper_subset?, #proper_superset?
Added SortedSet#sample
Move #to_list and #to_set to Hamster::Enumerable