Pipe: add a write function

We
- change 'type data = Cstruct.t list' so all available space
  in a ring can be represented even when it wraps round
- add a 'write' function which writes data without calling
  'advance'.
- change the BufferedPipe Proxy function to use write, rather
  than single byte writes.

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