Preparation for fetch only repositories

I started off with the goal of allowing fetch only repositories, and ended up going a bunch of refactoring to make that easier to do. So here is where has been done so far:
* separated fetch and merge into different methods
* extract push and merge notifications into the Notifier (which reduces the Runner complexity)
* always run #sync_changes on timer or file system events (should reduce push conflicts, and also reduces the complexity of the Runner)

Assuming that TravisCI stays green these changes are ready to merge.
I will continue adding commits for the fetch only functionality, or start a new PR if this one gets merged.