merge: set the checkout strategy to SAFE_CREATE

The expectation is set with Repository.checkout()'s default strategy and
the documentation text that we will write the merged content of the
files to the workdir. We however fail to override the default checkout
strategy when calling git_merge() which results in a DRY_RUN strategy
and no files being changed.

Set the checkout strategy to SAFE_CREATE to match expectations and text.
remote: clear self handle only on error

When setting the callbacks fails, we want to clear self._self_handle so
we don't leak a pointer to ourselves.

The current code used a 'finally' clause which clears it
unconditionally, which means that by the time the fetch starts, we have
no guarantee that the handle will be valid.

Replace that with an except and re-raise to make sure we only clear it
here if there was an error.
Merge remote-tracking branch 'carlos/merge-checkout-safe'
Merge remote-tracking branch 'carlos/clean-handle'