return cached file object, not just io.ReadCloser

Signed-off-by: Matthew Sykes <matthew.sykes@gmail.com>
cached downloads can be transformed

Signed-off-by: Matthew Sykes <matthew.sykes@gmail.com>
return io.ReadCloser for easier testability

also generate a fake instead of having a manual one

Signed-off-by: Matthew Sykes <matthew.sykes@gmail.com>