Store Git URL fields out of line (#22833)
`GitUrl` stores two URLs, a Git reference, and a resolved commit. We
embed it in the Git variant of `RequirementSource`, so registry and path
requirements also reserve space for those fields. Moving them behind an
`Arc` shrinks `GitUrl` from 280 bytes to 8 and `Requirement` from 520
bytes to 320 on x86-64. Clones share the Git fields until a reference or
commit changes.
We measured a large project with no Git dependencies against `main` at
`4954c25`. Each row uses four paired runs on Linux with a warm, offline
cache. Peak RSS values are medians, and the changes are medians of the
within-pair differences in percent.
| Resolve | Main peak RSS | This PR | RSS reduction | Wall time |
| --- | ---: | ---: | ---: | ---: |
| Fresh lock | 767.1 MiB | 697.0 MiB | 9.1% | 1.5% faster |
| Full upgrade | 1,017.1 MiB | 894.7 MiB | 12.0% | 1.2% faster |