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. 
Oh, there isn't any reason anymore. I initially had pulled this set of changes in from another branch and removed some stuff that needed to be able to reason about each component.