Fix remaining leaks and make sure that catch/throw and break still work.

The changes in the previous commit to keep memory from leaking was a nice idea:
I'd just make sure that yielding to ruby from a callback would be
protected  by `rb_protect`, and then return `GIT_ERROR` so that the
libgit2 iteration would stop and libgit2 could free all it's internally
used memory.

I'd then pickup the exception from `rb_errinfo` and re-throw it.

Turned out that this does not really work, because ruby also stores
catch/throw and break information inside `rb_errinfo`, and those can't
just be re-thrown. :(

This new approach makes use of the `payload` callback param to store
the jump location that we get from `rb_protect`, and pass that to
`rb_jump_tag` after libgit2 could clean up after itself.