Make repo.Init() accept a separate git dir

Relates to http://stackoverflow.com/q/17126448

- [ ] First blurry rough draft of an implementation
- [ ] Cover with tests
- [ ] Try to find a way through deprecation rather than through breaking changes
- [ ] Fix IRepository


**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.