Allow multiple consumers, protect from cleanup via rwlock.

With multiple distributor threads, we were seeing high CPU usage
when the storage queue was empty because thread 0 would block waiting for
a worker and then other threads would fail to acquire the lock and just
spin until another thread got a chance to block on the Receive.
Allow circumvention of random worker guid address when testing workers.