Use concurrent.futures.ThreadPoolExecutor in Python 3 to fetch package metadata

This makes fetching the metadata happen asynchronously, which can make it run
twice as fast.