GitMergeExecutor: Use 'git reset --hard' instead of 'git pull'

'git pull' has a chance to fail if the working directory is not in the
state we expect.
refactor/rewrite GitMergeExecutor

* remove usage of 'git pull --rebase'. That's not what we want
* retry push failures due to non-fast-forward race conditions
* retry git fetch failures in case of network problems
Delete branches from remote after they have been merged
Add warning to the UI that kochiku will delete branches after merging
Merge pull request #113 from square/rob/automerge-bugs