Replace marshalling with Cstruct.t

This removes all the unnecessary string copying.

It depends on unmerged prepare/commit support in shared-memory-ring