kv: Replace custom lookupRequests logic with singleflight.Group
kv: Replace custom lookupRequests logic with singleflight.Group

To avoid sending a storm of `RangeLookupRequests` for the same
`RangeDescriptor`, we have attempted to coalesce identical
RangeDescriptorCache lookups onto single DB lookup since 7027b38. To
facilitate this, we introduced some custom logic around mapping requests
onto identical in-flight requests. It turns out that the package
`golang.org/x/sync/singleflight` is meant for exactly this use case.

This change replaces our custom logic with the use of a
`singleflight.Group`. This allows us to delete a good chunk of code.

As a welcomed validation, the library looks extremely similar to our
previous implementation. The only downside to this change is that it
forces each range lookup request to occur on a new goroutine, instead of
on the goroutine of the requests "leader". This allows for symmetry
between all requesters because the first to issue a request no longer
has a different code path, which makes the code easier to read. Still,
we should consider if the cleanup is worth the cost of a new goroutine
per in-flight request.

paperstreet/cockroach,paperstreet/cockroach,paperstreet/cockroach,paperstreet/cockroach,paperstreet/cockroach,paperstreet/cockroach,paperstreet/cockroach,paperstreet/cockroach