Part of [[ https://linear.app/comm/issue/ENG-4269/implement-the-database-schema | ENG-4269 ]].
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:
1. Get the download object metadata (size etc.)
2. Set download params (range, format, streaming options)
3. Stream the data to the client
Depends on D8453.