Some modifications to the Push API:
In order to do so, I had to expose a new property on Branch: UpstreamBranchCanonicalName. This property contains the canonical name of the branch, relatively to the remote repository. When pushing, this is the reference that will be updated on the remote.
@jamill I incorporated a bit of your changes from #349 (the Remote.FetchSpecTransformToSource()), but I made it internal for the moment as I don't need to expose it.
Also, I did a bunch of renaming for the properties of the BranchUpdater. The main idea behind this renaming is that:
Rename GitFetchSpecHandle to GitRefSpecHandle
Move Push related tests to a separate file
Add the UpstreamBranchCanonicalName property to Branch
This property contains the reference of the tracked branch, relatively to the upstream repository (so "refs/heads/master", and not "refs/remotes/origin/master").
Add Push overloads taking Branch instances