Multiple fixes for the external diff handling

* Prefer to use `diff.guitool` over `diff.tool` when specified in Git configuration
* Properly handle line endings when reading reference blobs from the repository
* Use `Process.Start` instead of P/Invoke