Break coupling between IndexSet and IndexSpec

IndexSet#find_all created IndexSpecification objects that would call
back into IndexSet to fetch their specs from a cache.

This cache was not necessary as IndexSpecification cached the
Gem::Specification and Source#fetch_spec uses an on-disk cache
to avoid network requests.

This also allows IndexSpecification to be used outside of IndexSet.