Implement eval opcode.

A slightly hacky way to implement eval, reusing the current function
context but creating a new and separate list of opcodes. These are then
executed with a separate instruction pointer; at the end of the code,
execution returns to the normal function state.

The switch between normal function code and eval-generated code is
achieved by using a switchable `next_op` function. In normal function
code, this is simply `return code[frame.ip++]` as before. With eval
code, the `next_op` function is a closure over the generated code and
associated instruction pointer; when the end of the code is reached, it
resets the `next_op` function to go back to normal function code.

There are probably some other problems with this that I don't know
about. The compilation stage just reuses the same stack as the original
function code used, but this seems to work in my initial tests.