Add BottleCollector

The BottleCollector collects bottle tags and sha1s, and allows tags
to be fetched using more advanced logic than just fetching identical
tags.

Closes #23434.
Use BottleCollector in Bottle SoftwareSpec