Created QueryQueuingManager to limit the number of simultaneous queries and prevent queries with the same hash from running at the same time.
Refactored QueryQueuingManager to be simpler. Added internal metrics that report the number of queries waiting, query run time, and query collisions.
Changed the cache file name for delete to be a random UUID. This is to avoid the problem where two deletes might try to use the same cache file.
Merge branch 'feature-queryQueue' into develop