Refactor'n'Feature

- [x] Change `Submodule` in a way that it inherits `RepoObject` and change the semantics for accessing parent/child repository. Also give it a Private class header and remote the constructor that initializes with Repository and SM-Name.

- [x] Make opening sub-repositories implicit.

- [x] Change `Index` to follow the Nothing-Useful-Through-Constructor rule. That means: create static methods: `Index::createInMemory` and `Index::open`. Switch the constructor to do nothing then.

- [x] Change `IndexConflict` in the same way: Just turn the 3-parameter constructor into `IndexConflict::create`.

- [x] When these are done, I will remove all constructors, operator= operator== and such things and put them into a macro, so that they are _really_ the same for all of the `Base`/`RepoObject`s. This is also the only way to get most of them inline and give the compiler enough hints to get things "good".

- [x] Move the physically creating method out of `Repository` and make them static in their respective classes. I think this is better API.

- [x] Implement the union of `RefName` and `Reference`

- [x] Add handling of notes to `RefName`; even though `RefName` is now a `RepoObject`, skip reading all the notes relevant config settings.

- [x] Create separate `BranchRef`, `TagRef` and `NoteRef`, objects that inherit `Reference`.

- [ ] Add static creators to `Submodule`, `BranchRef` and `TagRef`. Deliberately skip `NoteRef`. This is too complex for now and requires integration all over the place.

- [ ] Implement whatever "setters" are required to write enough testing for the `repoman/refactor` code.

- [x] Create a basic CheckoutOperation
- [x] Cleanup lots of internal stuff
- [x] Cleanup the API