Enhancement: Improve pruning performance and make pruning more customizable The `prune` command is now much faster. This is especially the case for remote repositories or repositories with not much data to remove. Also the memory usage of the `prune` command is now reduced. Restic used to rebuild the index from scratch after pruning. This is now changed and the index rebuilding uses the information already known by `prune`. By default, the `prune` command no longer removes all unused data. This behavior can be fine-tuned by new options, like the acceptable amount of unused space or the maximum size of data to reorganize. For more details, see https://restic.readthedocs.io/en/stable/060_forget.html Moreover, `prune` now accepts the `--dry-run` option and `forget --dry-run --prune` also shows what `prune` would do. Fixes several open issues, e.g.: https://github.com/restic/restic/issues/1140 https://github.com/restic/restic/issues/1599 https://github.com/restic/restic/issues/1985 https://github.com/restic/restic/issues/2112 https://github.com/restic/restic/issues/2227 https://github.com/restic/restic/issues/2305 https://github.com/restic/restic/pull/2718 https://github.com/restic/restic/pull/2842