Enhancement: Improve `prune` performance and make it 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 could lead to missing packs in the index in some cases for eventually consistent backends such as e.g. AWS S3. This behavior 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, please see https://restic.readthedocs.io/en/stable/060_forget.html . Moreover, `prune` now accepts the `--dry-run` option and also running `forget --dry-run --prune` will show what `prune` would do. This enhancement also 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