Implement a MOV elision pass

The general idea here is that MOV operations don't actually need to
exist.  This pass gets rid of unnecessary MOV operations by rewriting
the sources of every operation that refers to them.

Note that this currently only elides a single MOV, not a big chain of
them.  A test should be added for that...