Switch from cstruct to ipaddr

This patch removes the dependency on cstruct for IP address handling and replaces it with a dependency on ipaddr. ipaddr is a much narrower package dealing only with IP addresses (v4 only for now but soon v6).

I have moved ocaml-dns away from using this part of cstruct and I believe ocaml-tuntap may be the only other user (based on OPAM metadata). Once everyone has stopped using cstruct's minimal IP address functionality, I hope to remove it. I would also like to consolidate mirage-net and ocaml-uri IP address handling in ipaddr and provide a complete set of IPv4, IPv6, and interop routines.