fn step(&mut self) -> Result<(), Trace> {
        let opcode = Opcode::from_byte(self.peek_byte());

        match opcode {
            Opcode::Con => self.con(),
            Opcode::NotInit => self.not_init(),
            Opcode::Del => self.del(),
            Opcode::FFICall => self.ffi_call(),
            Opcode::Copy => self.copy_val(),
            Opcode::Capture => self.capture(),
            Opcode::Save => self.save(),
            Opcode::SaveCap => self.save_cap(),
            Opcode::Load => self.load(),
            Opcode::LoadCap => self.load_cap(),
            Opcode::Call => self.call(),
            Opcode::Return => self.return_val(),
            Opcode::Closure => self.closure(),
            Opcode::Print => self.print(),
            Opcode::Label => self.label(),
            Opcode::Tuple => self.tuple(),
            Opcode::UnData => self.un_data(),
            Opcode::UnLabel => self.un_label(),
            Opcode::UnTuple => self.un_tuple(),
            Opcode::Noop => self.done(),
            _ => panic!("Opcode Not Implemented"),
        }
    }
Dissasembles and interprets a single (potentially fallible) bytecode op.
The op definitions follow in the next `impl` block.
To see what each op does, check `common::opcode::Opcode`.
passerine/src/vm/fiber.rs