Split into Ring (unbuffered) and Channel (buffered)

We will always use the Channel interface and decide at runtime whether
to ask for a layer of buffering or not.

Signed-off-by: David Scott <dave.scott@citrix.com>