Add an optimization to remove ref temps when possible

This changeset makes inlineFunctions remove reference temps when possible. "Possible" is defined as any call that is a primitive or only contains primitive calls. While not perfect, this does remove ref temps for simple things like =, +=, *=, etc.

test_nested_var_iterator3 has been turned into a bug future in the pull request. A limitation in copy propagation was exposed by my changes, Tom is aware of this and said he will look into it. 
Yeah, that isn't valid to do in all cases, the simplest one looks something like:
```
bar(ref a: T) {
  _prim('deref', a);
  ...
}

foo() {
  var x: T;
  bar(x);
}
```
You are correct that it limits the number of ref temps that we can replace, but the check would need to be a bit smarter. I have it on the list of things to go back and mess with at some point.