Support for multiple AMODES in a single process

At the assembler level, the kernel supports multiple AMODES in a single process, and switching back and forth between AMODES on a single thread. Different threads in a single process can have different AMODES.