Download multiple files, batching by backend for efficiency.
Groups paths by their target backend, calls each backend's download_files once with all paths for that backend, then merges results in original order.
download_files(
self,
paths: list[str],
) -> list[FileDownloadResponse]