MAJOR: channel: replace the struct buffer with a pointer to a buffer

With this commit, we now separate the channel from the buffer. This will
allow us to replace buffers on the fly without touching the channel. Since
nobody is supposed to keep a reference to a buffer anymore, doing so is not
a problem and will also permit some copy-less data manipulation.

Interestingly, these changes have shown a 2% performance increase on some
workloads, probably due to a better cache placement of data.
diff --git a/include/types/channel.h b/include/types/channel.h
index a21e13f..efd1a12 100644
--- a/include/types/channel.h
+++ b/include/types/channel.h
@@ -186,7 +186,7 @@
 	struct stream_interface *prod;  /* producer attached to this channel */
 	struct stream_interface *cons;  /* consumer attached to this channel */
 	struct pipe *pipe;		/* non-NULL only when data present */
-	struct buffer buf;		/* embedded buffer for now, will move */
+	struct buffer *buf;		/* buffer attached to the channel, always present but may move */
 };