fix(diskio): fall back to single-threaded unpacking when `ram_budget` < 512MB to avoid OOM on memory-constrained systems
Rustup OOMs on systems with <1GB RAM because it spawns multiple I/O threads for unpacking regardless of available memory. The Threaded executor uses far more memory than its buffer pool budget tracks. This PR adds a 512MB ram_budget threshold below which rustup falls back to single-threaded unpacking, which peaks at ~110MB.
Fixes #3125