Clean up threading to make everything work correctly with a bounded chan of 1.

Which gets me thinking. STM and TBQueues are fun and all. Do I really need a
chan though? Let's try an MVar!