Use function-pointers for op-decoding.

This is a hugely-churnful update which moves all the opcode-processing
out of the large switch/case statement and into a distinct routine for
each opcode.

This will cause a slowdown, but not significantly enough to care about.

Updates #2 - which I will leave open until I've moved the code into
external files.