Gzip writer/reader

A general refactor of code to have the ability to provide other reads/writers in addition to sequence file readers. 

Added some tests for the writers and readers and also added a performance test.
The "revisiting" part is what worries me. This interface is becoming part of the public API and so we should try to make it as stable and well structured as possible. I thought that an Init() method would make the structure more explicit and help to capture potential incompatibility issues at compile time vs run time. Having that said, I don't have a super strong opinion on this. If you decide to keep this as is, could you please add a comment here describing the required signature of the constructor?