Simplify temporaries in our generated intermediate code.

Due to how expressions are turned into intermediate code (each one
produces a temporary that it leaves its result in) we get left with a lot
of temporaries that aren't really necessary. This post-processing step
removes the most obvious of these, leaving us with fewer unneeded
temporaries along with fewer intermediate code elements.