feat: port prune to rust (#5531)
### Description
Port prune from Go to Rust and remove the old Go implementation. To
achieve this the following was done:
- Parsing the lockfile during package graph construction
- Porting utility functions
- Some minor changes in `turborepo_paths`, these were primarily moving
methods from their owned to borrowed counterparts
- Expanding `package.json` parsing to grab some of the information
pruning requires
- Porting of the prune command itself. I added some additional structure
compared to the Go version, but not enough that comparing it to the Go
version should be difficult
Notes for reviewers:
I apologize that this PR ended up touching as much as it did. Reviewing
the PR by commit should at least make all of the changes and their
impacts obvious. Commits before `2d4154c` are already on main and can be
skipped.
### Testing Instructions
Existing unit tests and integration tests for file copying and package
graph traversal. Actual lockfile behavior is mostly covered by unit
tests that were ported when the lockfile were ported.
Also did various manual testing with pruning monorepos.
---------
Co-authored-by: Chris Olszewski <Chris Olszewski>