[WIP] first steps into using the GitHelper

                    
|Q            |A   |
|---          |--- |
|Fixed Tickets|#332|
|License      |MIT |
                    

This the first PR to improve the git execution.

Commands only use the GitHelper and no longer execute git directly. 

And this PR brings some small additions as well :blush:

- pull-request:squash preserves the original first-commit message
- pull-request:switch-base creates a new PR with (only when the adapter does not support switching) and
  preserves the orginal subject and description.
 Sent using [Gush](https://github.com/gushphp/gush)

TODO:
- [x] Update tests
- [x] Check if all git executions are done using GitHelper
- [x] Remove duplication
   - [x] use guards for checking working-tree.
- [ ] Always restore to original branch on error
upstream is the concept but not the name, since origin is the default is ok, but since we are passing a remote parameter to specify that then we should convey that it is the upstream version pointed by the remote passed optionally