Remove commiting from GitMergeContextManager

Instead of performing a merge within the __init__ of the GitMergeContextManager,
only create the state needed for the merge to happen, and break merging out into
it's own method.
Add thorough submodule conflict detection

Fully flesh out submodule conflict resolution based on the merge-branches push
helper script.