Fix for #1532: assert() cannot handle certain combinations of exists/is conditions

Turns out that we were using Cond.getVariableName which returned a SubstitutedName to
create the statements required for a Cond, including the variables we store stuff into,
and because assert never causes the substitutions to be closed before the outerscope,
every inner cond that substituted a same variable more than once would install new
substitutions before the previous assert Cond would try to declare its local variable
storage, which would then get a substituted name shared with the next assert Cond.

We now store substituted names once and for all, and force the substitution in
AssertCondList.getSubstitution to make sure it stays the same
StatementTransformer: remove duplicate allocation for nothing
Test for #1532: assert() cannot handle certain combinations of exists/is conditions