make use of .net's BlockingCollection

This converts from a SpinWait to a Semaphore if there are no events
after the SpinWait times out.  This prevents unneccesary spinning of the
CPU
Merge pull request #23 from Glympse/UseBlockingCollection

make use of .net's BlockingCollection