Move the disassembler over to a class-based API

No need to carry an object through every single opcode function call.