Improve file download.

- Do not load file content into RAM, return a stream iterator instead.
- Handle range requests.
- Handle if modified since requests.
- Set content-length header.