I suspect this is a dumb question, but I'm not seeing it yet:  I feel like we're double-freeing if you call `GIT_REFCOUNT_DEC` when you decrement after already freeing?  Ie, the last user calls `GIT_REFCOUNT_DEC` to decrement to 0, if you were to call it again, we would decrement to -1 and free again.

Should we do assert if `val < 0`?  (Or maybe just ignore it in non-debug builds)