Find the activated version of a crate based on the name, source, and semver compatibility.
By storing this in a hash map we ensure that there is only one
semver compatible version of each crate.
This all so stores the ContextAge.
When backtracking it can be useful to know how far back to go.
The ContextAge of a Context is a monotonically increasing counter of the number
of decisions made to get to this state.
Several structures store the ContextAge when it was added,
to be used in find_candidate for backtracking.