Removed the last_synced_oid from Repository#push

With the additional checks on the remote branch and the HEADs I do not
think that it is necessary any more. Removing it all reduces the
complexity of Repository#push making it easier to test.
Separate the commit and push methods in Repository

This has 2 benefits:
* make the methods simpler and more testable
* allow the order of repository operations to be more flexible
Stop the addition of extra conflict markers

Due to a mis-understanding of how the Rugged index_entry list works,
and not having a test which covered this particular scenario the
conflict marking was marking all of the files during a conflicting merge
instead of just the conflicted ones.

The code has been modified to specifically look for index_entries which
have 2 or more conflicting commits. A test case covering this scenario
has also been added to the test suite.

I think this will resolve issue #82
Merge pull request #83 from acant/bug/conflict_markers

Fix for the extra conflict markers and some Runner and Repository refactoring