Package cacheContext implements a context.Context wrapper which caches the results of Value calls, speeding up subsequent calls for the same key.
Context values are stored as immutable layers in a backwards-referenced list. Each lookup traverses the list from tail to head looking for a layer with the requested value. As a Context retains more values, this traversal will get more expensive. This class can be used for large Contexts to avoid repeatedly paying the cost of traversal for the same read-only value.