Caching

cache previously computed results within Souper

this includes some refactoring suggested by Peter to avoid using the CandidateMap from Pass

anyway it was pretty inelegant to repeatedly create the Solver from Pass, this is much nicer

This is missing the triviality check above. What you could do is have this function take a ```const CandidateExpr &``` and let callers perform the check.

I'm also open to arguments that we do not need the triviality check.