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.
I would probably combine FileReader with FileWriter into one interface, something like FileReadWriter. In reality, you need to implement both and I don't see realistic cases where mixing different reader-writer configurations makes sense.