Fixed an issue with mutation.

Previously using (setq ...) would not only do the right thing. Now the
expression for the value is actually evaluated and (setf (val ...) X)
will now return the value of X.