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`
Could be refactored into: `path.empty? || !get_object(rugged_commit, path).nil?`