Although S3 offers a GetObjectTorrent API call to generate a torrent
file on their end, it doesn't look like any similar systems with S3
compatible APIs actually support it. Notably, Minio and Wasabi do not.
In order to remain compatible with these, it's better to not rely on the
storage backend to handle creation.
* Bail out on files that are too large earlier if possible.
* Return 400 instead of 500 for empty files and files that are too large
(when we can bail out early).
This new backend currently isn't hooked up; new and existing installs
will continue to use the localfs backend.
* Rework torrent generation to be backend-dependent so we can use S3's
existing torrent API.
* Remove the torrent test cases, which broke with this torrent rework;
they will need to be added back later.
* Use `http.MaxBytesReader` for better max size handling.
* Allow backends to return errors in `ServeFile` if needed.