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