Make repo.Init() accept a separate git dir

Relates to http://stackoverflow.com/q/17126448

- [x] First blurry rough draft of an implementation
- [x] Cover with tests
- [ ] ~~Try to find a way through deprecation rather than through breaking changes~~
- [x] Make `Clone()` return a string instead of an instance of a `Repository`

**Note:** "Initializing a repository" and "Opening a repository" are different concerns and require different kind of parameters. Thus repo.Init() won't return a instance of a Repository any longer.