Coroutine network channels

Hi all,

I recently created a library for coroutine-based network channels. The kdoc is here: https://consensys.github.io/cava/docs/kotlin/0.5.0/cava/net.consensys.cava.net.coroutines/index.html

It provides the following:

These can be grouped using a CoroutineChannelGroup, similarly to how JDK AsynchronousChannel instances can be grouped by an AsynchronousChannelGroup.

The implementations of these use a java Selector to suspend coroutines and awaken when there is network activity (provided by CoroutineSelector).

I’ve done my best to implement these “correctly” using the latest kotlin coroutine API and documentation, but I won’t pretend to be an expert, especially in these moving waters. I’d love some feedback - both on the APIs and on the implementation.

Thanks!