feat(lockfile): traverse lockfile in parallel (#7178)
### Description
I remembered that the FFI interface was what was stopping me from
throwing rayon at the lockfile graph traversal. This can be done easily
since we already require that all lockfile implementations are `Send`
and they don't mutate the underlying lockfile.
There's a more elegant way to do this and avoid calculating inner
closures multiple times, but this is a straightforward win.
### Testing Instructions
From
<img width="317" alt="Screenshot 2024-01-30 at 5 40 42 PM"
src="https://github.com/vercel/turbo/assets/4131117/a6334c99-7c61-4bf3-8a24-b29999a74511">
To
<img width="328" alt="Screenshot 2024-01-30 at 5 40 32 PM"
src="https://github.com/vercel/turbo/assets/4131117/5c0cd0c4-1818-4468-aaac-ce47b924f385">
[serial.json](https://github.com/vercel/turbo/files/14106106/profile.json)
[parallel.json](https://github.com/vercel/turbo/files/14106107/parallel.json)
Closes TURBO-2197