feat(restore): add `cross-seed restore` to inject torrents from cache
If a user has lost their client session information, cross-seed is often used to regain their torrents using data based searching. While that will still be necessary to be complete, we can use torrent_cache to aide this processess. The torrent_cache will likely also contain the "original" torrents, not just cross seeds, as we only know if a torrent already exists after snatching.
With cross-seed restore, torrents from torrent_cache are copied to outputDir in the naming format. Users would then run cross-seed inject with dataDirs to complete the restore.
Copying is done so the cache is not modified and it also allows for cross-seed to be restarted during the injection process. Injected or unmatched files will get cleaned up naturally by the job. They also retain the .cached.torrent suffix for easy identification. We cannot use the decision cache to selectively copy since searchee's are unique by name only, so different sizes could have previous decisions overridden.