Improve hack to set/restore the cursor with Gdiff

This uses `winsaveview` or `getpos` on the original buffer before
`diffsplit` and restores it before changing to the diff window.

This makes restoring the original position more reliable.

Fixes #428
Ref: #429