use try lock and backoff if busy during write lock

if one worker is running the source client and has a write lock then any listeners
on that source but on another worker would block stalling that worker. This allows
the listener to be skipped for now allowing other clients to be processed.
queue shrinking, saves on memory use

triggered when no data present, and after all listeners should of checked
their queue position, the oldest block will be used to prune to.