Add IPv4/6 conversions from/to Cstructs

Re #12 
Yeah, removing the allocator is fine, or having an `alloc` optional argument that can override it.  So you could have

```
val set_cstruct : ?off:int -> t -> Cstruct.t -> unit
val to_cstruct : ?(alloc:unit -> Cstruct.t) -> i -> Cstruct.t
```

The latter would let you pass in `Io_page.(to_cstruct (make 1))` as the allocator function, and use `Cstruct.create` by default if not specified.