5370484307
## Summary This PR uses the wheel stem (e.g., `foo-1.2.3-py3-none-any`) instead of the wheel name (e.g., `foo-1.2.3-py3-none-any.whl`) when storing unzipped wheels in the cache, which removes a class of confusing issues around overwrites and directory-vs.-file collisions. For now, we retain _both_ the zipped and unzipped wheels in the cache, though we can easily change this by storing the zipped wheels in a temporary directory. Closes https://github.com/astral-sh/puffin/issues/573. ## Test Plan Some examples from my local cache: <img width="835" alt="Screen Shot 2023-12-05 at 4 09 55 PM" src="https://github.com/astral-sh/puffin/assets/1309177/784146aa-b080-416e-9767-40c843fe5d6a"> <img width="847" alt="Screen Shot 2023-12-05 at 4 12 14 PM" src="https://github.com/astral-sh/puffin/assets/1309177/4bc7f30f-bef3-47f1-b4e8-da9cabf87f28"> <img width="637" alt="Screen Shot 2023-12-05 at 4 09 50 PM" src="https://github.com/astral-sh/puffin/assets/1309177/25ca4944-4a06-4a08-ac85-c6f7d8b5c8ea">