Moved I/O portions of Tar_unix to a functor.

The primary motivation of this pull request is to allow integration of ocaml-tar with camlzip to allow .tar.gz/.tgz files to be read in "stream" mode.
In designing the Tar.Make functor, all decisions were taken around that the idea that it must be possible to write module TGZ = Tar.Make(Gzip), hence the names of functions for module type IO follow those in Gzip (which is more like Pervasives) than Unix. Additionally, it means that functions which would require boilerplate (such as Tar_unix.Header.of_file) are not included. However, for functions Tar_unix.Archive.extract and Tar_unix.Archive.create, new functions extract_gen and create_gen have been added.