It seems like this it just a utility function that should be delegating to the `Reader`/`Writer` implementation. I would expect this to be something along the lines of:

```
let mut writer = GZipWriter::new(writer, some, other, arguments);
io::copy(&mut writer, reader); // function doesn't actually exist, but it just copies information.
```

Is there a reason for having all this extra code for doing something like that? It seems like they would both have the same performance characteristics.