Part of ENG-4269.
Most of this code is copy-pasted from http::handlers::blob::get_blob_handler
Decided to create a separate download object, similar to "upload sessions" we already have. The reasoning for this is that we typically have the following workflow:
- Get the download object metadata (size etc.)
- Set download params (range, format, streaming options)
- Stream the data to the client
Depends on D8453.