Opcodes as class instead of enumeration, move to implementation