Don't perform substitution of args initially

This will be delayed until we have fully generated the SSA
Add @Override to Instruction.getSubstitute
Make getSubstitute of variable reference an error
Don't construct def-use information initially

This will be done after CSE
Don't remove uses when an instruction is deleted

This won't do anything since the def-use information won't be available
until after cse is performed.
Add stripVariableReference

This will remove all variable references, will need to be done before
CSE.
Use stripVariableReference in var ref constructor
Make NaryInstruction.getArguments create ArrayList

This will create a new collection containing the arguments, this is to
bring it in line with the other instruction types and to make it
impossible for other functions to modify this internal data structure.
Add method to strip var refs from instruction args
Fix bug in UnaryInstruction replace argument
Add functions to basic block to replace variables
Replace variable references before outputting cfg
Add Pass interface

This is an interface that encapsulates a pass over the instructions in
order to perform some sort of transformation.
Add method to BasicBlock to run pass
Store instructions in basic block in LinkedList
Make Pass.run accept list iterator
Add pass ReplaceVariableReferenceInLoop
Use ReplaceVariableReferenceInLoop in LoopHeader
Substitute arguments before performing CSE
No longer perform CSE when instructions are added