WIP: Teach MergeOptions about CheckoutOptions

This change:

1. Brings `CheckoutOptions` to the Checkout methods
2. Refactors some of the logic creating the native `git_checkout_options` struct, to make it easier to use `CheckoutOption`s across different operations.
3. Brings `CheckoutOptions` To Merge.
4. Exposes `FileConflictStrategy` in `CheckoutOptions`

The `FileConflictStrategy` parameters currently only applies to the checkout during a merge operation. Longer term this property should be generally applicable to any `Checkout` operation, but it currently is only applicable to `Merge` operations. Given where I think this parameter will be used longer term, I decided to include it in the `CheckoutOption`s class, and then expose the `CheckoutOption`s parameter through `MergeOption`s. The other option would be to (for the short-term) just include this parameter in the `MergeOption`s class.

The other benefit is that the `Merge` operations would now pick up all the options exposed by the `CheckoutOption`s. However, only `FileConflictStrategy` is exercised through the merge tests. If people approve of the general direction, I can add some more tests.