Rugged/Grit push conversion

Converted the Repository#push method to use Rugged and Grit for the git
operations.

In the process #push was slightly modified such that it will now make
commits even if there is no remote, but it will not push those commits.

The Repository test was also updated to use Mocha to stub push failures
instead of trying to arrange the repository such that it fails. This
should be more reliable.
Rubocop updates for Repository related files

Almost everything, but I specifically did not clean shell related code
which will likely go away after #pull is also converted to Grit/Rugged.