rewrite rustup to support caching nightlies, protects against truncation errors

This closes #19168.

Please be careful reviewing this since this gets used all over the place. I've tested all the options and everything appears to be working though.
Yes, when no flag is specified it downloads the current nightly, which does not include the date in the url.