Async listener V0.

Hi Brian!

This code is the prototype of asynchronous listener running in a separate thread.

The listener itself is still based on an infinite loop and delays. Nonetheless:

* Listener thread tears down correctly.
* A method to essentially "Flush()" the listener, to ensure that all available entries are processed, is added.
* Tests are now async-aware, making heavy use of the method above.
* Mutexes are in place, likely more than there should be.

All tests pass.

Thanks,
Dima
Good point. Name choice is confusing here, my bad.

Let's keep ```HasData()``` part of the external interface, for it to acquire the lock.

For the internal one, what could be a name that indicates that this method should be called only when the lock is already acquired? Some ```InternalHasData()``` or ```WithinLockHasData()```?