MEDIUM: buffer: always assign a dummy empty buffer to channels

Channels are now created with a valid pointer to a buffer before the
buffer is allocated. This buffer is a global one called "buf_empty" and
of size zero. Thus it prevents any activity from being performed on
the buffer and still ensures that chn->buf may always be dereferenced.
b_free() also resets the buffer to &buf_empty, and was split into
b_drop() which does not reset the buffer.
diff --git a/src/buffer.c b/src/buffer.c
index 9037dd3..7691026 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -22,6 +22,10 @@
 
 struct pool_head *pool2_buffer;
 
+/* this buffer is used to have a valid pointer to an empty buffer in channels
+ * which convey no more data.
+ */
+struct buffer buf_empty  = { .p = buf_empty.data };
 
 /* perform minimal intializations, report 0 in case of error, 1 if OK. */
 int init_buffer()