Updating download function to use reader

As #271 highlights, we're casting everything into a slice of bytes at the moment - so we should probably switch to a reader. This PR is just my initial thoughts, so feel free to suggest a better approach if anything pops into your head :smile: 
@pquerna yes, I think you're right - you can't really do anything with `res.Body` after it's been read to EOF