Detect a rename changeset (where all the datas are deleted) and prevent it

and Add Unit Test in ChangeSieveTests to support branch deletion
Ensure that other deleted directories don't affect this project.
Also don't fetch anything if it's just going to be deleted and ignored.
Do not query shelved changes outside of our tree

Because changes outside of the tree are ignored anyway, don't bother
querying them from TFS in the first place.
Merge pull request #586 from pmiossec/detect_rename_changeset

Detect rename changeset
Merge pull request #589 from kgybels/ignore_shelved_changes_outside_our_tree

Do not query shelved changes outside of our tree
FindTfsParentCommits : Improve performance

- Remove recursivity
- Don't process the same commit (and ancestors) two times

Fix case where git-tfs take too much time, CPU
 and memory in a none "git-tfs repository" with a lot of commits
Compile Regex
Some trivial code refactoring in FindTfsParentCommits.
Keep topology order to follow
Unit test GetLastParentTfsCommits from GitRepository
Refactoring to let MoveTfsRefForwardIfNeeded & GetLastParentTfsCommits use same code
Add condition on commit and changeset for performance
Refactoring to let redefine how to process the commit

+ MoveTfsRefForwardIfNeeded condition is only about commit date
Unit tests to verify that MoveTfsRefForwardIfNeeded() find also changeset in other branches