Optimization: Avoid substituting when checking satisfiability

Instead of replacing all constrained poly params by their lower bounds before checking satsfiability,
we now do this on the fly in the subtype tests.