Use indices for memory operations instead of offsets

This makes the interpreter's job a little more complicated because it
has to go calculate offsets now. However, the bytecode format no
longer needs to worry about object headers (e.g., 8 bytes for the
meta), and the bytecode is also 32/64-bit agnostic. The VM is free to
arrange fields within objects as it sees fit.