Fail over from source to dist and vice versa when downloads fail

Any RuntimeException descendent will be caught and cause another
download attempt using either source or dist depending on what was
attempted first.
Download failover means we can now always try github zip urls for dist
Correct the tests for dist urls for github
Rethrow download exceptions when no options left & clean up code
Merge remote-tracking branch 'naderman/download-failover'
Tweak error message and make TransportException extend from RuntimeException, refs #2753