Add Push overloads

Some modifications to the Push API:
 - [x] Add overloads taking `Branch` instances
 - [ ] Add overloads taking `Tag` instances ?

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.