The whole channel ownership semantics here get kinda hairy: it bypasses the send/receive channel type safety, because the user has to submit a send channel but use it as a receive channel. More generally, even with user-submitted channels, I don't like the idea of having the driver manage multiple ones per-listen. I think it's a dramatically less-common use, can be managed outside of the driver, and unduly complicates the listening code.

Alternately, if we hand out channels instead and give out one channel per Postgres listening channel (maybe even with a user-supplied buffer size), that dramatically simplifies `pq` code and still lets users build more elaborate systems on top of that.

Stepping back, are there examples of similar mechanism in either the standard library or other well-established libraries or projects that we could emulate (or at least learn from)?