Assignment semantics for multi-assignment
This comes up trying to solve #34.
In order to do any sort of transformation of multi-assignment expressions, we need to come up with a policy regarding what a multi-assignment expression should do in the presence of left hand sides whose values may overlap in some way.
Otherwise, the following transformation won't generally be safe:
a, i, x[i] = f(...)
->
a, temp1, temp2 = f(...)
i = temp1
x[i] = temp2