SValBuilder tries to constant-fold symbols in the left-hand side of the symbolic expression whenever it fails to evaluate the expression directly. However, it only constant-folds them when they are atomic expressions, not when they are complicated expressions themselves. This patch adds recursive constant-folding to the left-hand side expression (there's a lack of symmetry because we're trying to have symbols on the left and constants on the right). As an example, we'd now be able to handle operations similar to "$x + 1 < $y", when $x is constrained to a constant.
The constant-folding procedure, which i put into SValBuilder::simplifySVal(), is reusable, and i suspect that there are numerous places around SValBuilder, ConstraintManager, and our checkers, where it could be useful, but this patch tries to be relatively careful.
I'm still to see how it affects performance.