Finding root changeset: better finding of renaming

- Protection against find itself as parent branch
- Support of renaming of renaming
- keep the last "renamed" merge is important when no root found (with what is supposed to be the root branch)

+ catch problem when finding root changesets
Correct UnitTests
Move InitBranch() in the GitTfsRemote (to be able to init one from there!)
write what should be done...
being able to fetch until a changeset is reached
Retrieve also deleted tfs branches if needed
Create on the fly the missing remote (with fake Sha1 for the moment)
Fetch just changesets needed (until merge changeset)
Find the sha of the root changeset of the tfs branch to create
Before initialising a new branch, verify that it has not already been done
better way to find if changesets fetched
Get the TfsRemotes if branch was already initialized
Introduce a config value GitTfsConstants.AutoInitBranches

...to know if we should auto init branch when merge is encountered
 and the branch not actualy initialized
Add support of baseless merge

Git-tfs now support to merge a root branch (which is not branched from an already initialized branch) in another branch.
The root branch is now initialize on the fly and the merge commit created...
Create local branch only when it don't already existing (to prevent crash)...
Add an option "-ignore-branches" to ignore merged branch when fetching in merge changeset

It correspond to the old way git-tfs worked!