Refactor and improve `git squash`

This pull request contains refactoring work and improvements for `git squash`.

These issues are handled:

 - `reset --soft` is used as per issue #198
 - added prompt if master branch is squashed as per issue #198
 - command arguments should be more consistent, inline TODO
   [here](https://github.com/bruno-/git-extras/commit/c136afba673e5d53c7c4c7be2407245158f2523b#diff-eb9f2ea45b9ddfbb3aa2bfdbdcaa44b0R10)
 - I strived for things to be less hacky now e.g. no temporary branches and
   heavy branch manipulation. Inline todo
   [here](https://github.com/bruno-/git-extras/commit/c136afba673e5d53c7c4c7be2407245158f2523b#diff-eb9f2ea45b9ddfbb3aa2bfdbdcaa44b0R9)
 - handles bug from #95

I did a decent round of testing for this locally and everything was fine.

Please let me know if you have any questions or code has to be tweaked etc.