Expand Merge API.

This includes several updates to the Merge API:
* Refactoring of the merge logic to support different merge workflows.
* Introduce Pull functionality.
* Introduce Merge Branch functionality.
* Adds `MergeOptions` param, to specify the type of merge and whether to commit it or not
* Also adds a simple repository to perform merges in, simplying test logic.

Feedback on the API and / or testing approach would be welcome. I was trying to see if including a simple pre-populated merge repository would simplify the testing logic, and I think it does.

TODO:
- [x] Pull API is still being worked on - need at least more options.
- [x] Hide unnecessary Properties (e.g. Network.FetchHeads)
- [x] Incorporate reflog updates
- [x] Incorporate updates to allow for merging into an orphaned branch
- [x] Incorporate updates to allow for pulling into an orphaned branch
- [x] Get tests passing