libc++ doesn't like stateful comparison objects

Fixed by associating the cache with the Exprs being compared, rather than
the comparison object. Yuck, but the other option was a global cache.