Port instruction::to_string() to opcode

This uses the opcode enum instead of internally using its own decode
logic.