startDownload
Starts a download on this repository's own scope and mirrors its emissions into downloadState, so a caller observes progress instead of collecting a Flow tied to its own lifecycle — see scope's own comment for why that distinction matters here. A no-op while a download is already running, closing the double-tap window a UI-side "is it downloading" check can't close on its own (the first TerrainDownloadState.InProgress only arrives after several tiles have already been fetched).