The visitor pattern allows functionality to be added to a number of classes
(or in this case one class, Instruction, that can vary in
behavior) without modifying the classes themselves. Additionally, the visitor
pattern simulates double dispatching. For instance visit method of
Instruction calls a particular method of
InstructionVisitor based on the Instruction's opcode.