LSIF: Reduce duplicate work in location resolution
Created by: efritz
LSIF server returns a list of locations for references and definitions. This requires a repository, commit, and git-tree lookup for each result. The previous code did this in the naive way, looping through each location and resolving the repository, commit, and git tree in sequence.
This PR discovers each distinct repository, commit, and git-tree, and reuses the results. Everything is still sequential (no goroutines added), but reduces the duplicate work in re-resolving the same repo and commit multiple times.