[DO NOT MERGE] Implement Stash API.

Based on https://github.com/libgit2/libgit2/pull/2705

Not in master yet, adding so I can test locally.
How should we foresee to cope with conflicts? Throwing may be inappropriate. Maybe return a `Stash[Apply]Result` ?