GitRepository refactoring

This cleans the git code a little bit and puts things into better places.
* move some methods from `Repository` to `GitRepository` that actually belong there
* use more delegates
* use less `@repo`
* rename variable `url` to `path`
Same comment as before:
> I'm leaving this as is - for emphasis. There are a lot of local path variables in this file and this occurrence is the only one that actually uses the delegate.