Jeversmann/git repo refactor

I tried to push the logic for handling repo urls into the RemoteServer classes, and then used delegating to preserve the old Repository methods. A bunch of specs had to be moved/rewritten after the refactoring and the RemoteServer constructor change. GitRepo now has private methods to handle submodules, which use RemoteServers to rewrite the submodule urls.
I added the RetryPartitioning endpoint because rebuild failed parts doesn't affect builds that error in partitioning, making them unsalvageable.
calling replace-all every time is not that bad but we could guard this with a simple if condition so that it doesn't shell out to 'git config' on subsequent calls when the url has already been updated.