Separate #push into #fetch and #merge

This reduces the complexity of each of the methods, and will make it possible
to have fetch-only shares in the future.
Add coverage for multiple search matches in a file
Style clean up in Repository
Extract push and merge notifications into Notifier

In the process of making some changes to the Runner it was being made more
complicated by having to account for the different possible notifications.

And this pain made be re-think the design a little bit. The notification
sections do not have anything to do with the rest of the runner, so
extracting was straight forward.
Merge push_changes into sync_changes

When doing a sync on the repository we will now always follow the order:
* commit
* fetch
* merge
* push
This will help to ensure that changes are quickly committed and reduce
conflicts when pushing to the repository.

This also simplifies the code because we no longer need #push_changes,
as #sync_changes is always called.
Merge pull request #84 from acant/feature/fetch_only

Preparation for fetch only repositories