ReadStream: never siphon if CacheMaxSize <= 0

If the user has not set a CacheMaxSize >0, we should never attempt to start
siphoning values while reading objects.

@peterbourgon This is the absolutely minimally invasive change I could come up with to implement this without various other knock-on changes (for example, tweaking the Compression interfaces to work with ReadClosers, etc). It's a little weird to have to introduce the closingReader but I did it that way to essentially preserve the same behaviour of the siphon closing the file on EOF. 

An alternative would be changing the `ReadStream` interface to return a `ReadCloser`, and insist that the user closes the object when done with it (and that would close the underlying file). Not sure how you feel about going in that direction.
@peterbourgon Yes, sort of, except I kept the interface tighter because what `d.Compression.Reader()` expects (and what `ReadStream` returns) is a `Reader`, not a `ReadCloser`. So then `closingReader` would implement `io.ReadCloser` but never have its `Close()` method invoked. Make sense?