Unshelve from the actual Shelveset's parent

Fetch/Unshelve commands have been always basing the parent for the commit to-be on the latest index fetched from TFS, which I believe, is wrong :)

To verify, try this:

    git checkout <a old commit on a tfs branch>
    git add (some random files)
    git commit -m "blah"
    git tfs shelve my_shelveset
    git checkout tfs/default
    git unshelve -u my_user my_shelveset  my_branch
    git git checkout my_branch

Shelveset contains your changes and has reverted everything that happened since that old commit.


**Changes:**
   * INDEX is updated to look like the parent that the new commit is going to be based on.
   * Base TFS changeset Id for a shelveset is computed as the maximum ID of all involved files minus one. (Which is effectively the changeset the Shelveset is based on)

- Tests pass, 4 skipped though. 
- Rebased to the latest upstream on master.

Related: #248