improve stashes, use them for backups

Instead of relying on `git stash` implement stash creation in elisp. This allows doing things that were not possible or rather convolved when using `git stash create` and friends.

* Creating snapshots no longer changes modification times
* The index-only variants are now save
* Add worktree-only variants
* Use stashes for backups instead of patch files
* Show both diffs when showing a stash
* The third untracked-files diff is also shown when appropriate but not as useful as it could be yet
* List regular stashes or backup stashes in a separate buffer