Fixed incorrect caching in primVarSet and primVarChange

Transfer of #161.

Due to a copy-paste error, the SET and CHANGE primitives cache their variable using the wrong key—the spec of the block, either `set %m.var to %s` or `change %m.var by %n`, instead of the variable name. Normally, this isn't noticeable: the only time it causes *incorrect* behavior is when you have a variable named `set %m.var to %s` or `change %m.var by %n`. However, it makes the SET and CHANGE blocks slower because their caches always miss.