Finds the solution to "goals", or trait queries -- i.e., figures out what sets of types implement which traits. Also, between queries, this struct stores the cached state from previous solver attempts, which can then be re-used later.
Wrapper around a
When a goal holds ambiguously (e.g., because there are multiple possible solutions), we issue a set of guidance back to type inference.
A (possible) solution for a proposed goal.