Clean up diff options struct management

Instead of requiring callers to remember to call +freeOptionsStruct:,
have callers pass in a block, so cleanup happens automatically once the
block returns.

Then, since the struct doesn't have to outlast the method, just use
stack allocation of the git_diff_options (and the enclosed git_strarray
if necessary), so no explicit cleanup code is required.