Support uploading from a remote source

At our organization, we have a tool that has a lot of overlap with twine. It uploads an existing sdist from a URL or from a local file and uploads it to a Package Repository, much like twine does for local files only. This changeset adds support for remote sources in addition to simply local files.

This pull request should be easier to read if read chronologically. This pull request does a significant amount of refactoring, which I suspect will benefit unit tests as well.

I've been unable to fully test the functionality as the solution doesn't yet fully work with chishop (the package index we use internally) due to a 501 NOT IMPLEMENTED, so please do test in your environment.