The producer consumer queue we currently have is useful, but doesn't have support for multiple producers. A handful of small modifications will make it much more useful:
1. Introduce a Pipe type which exposes the pcq as a producer end, a consumer end and an admin interface.
2. Provide template params for the pcq so that we pay for multi-ness only for types that want it