Introduce memread/memwrite16
Refactor step() into many small functions

This matches the go version and has improved instruction dispatch time from
~4900/65536 to 4450/65536

There was initially some small reduction in code size, but it is starting to creep up again as the compiler decides not to inline functions.