vm_machine_interface and vm_machine_object

This commit introduces the above 2 structs.

  vm_machine_interface: This is a struct of function pointers, defining
      a clear interface through which the machine independent vm code
      (mm/vm.c) can invoke machine dependent vm routines (e.g. in
      x86/vm.c).

  vm_machine_object: This is an opaque object from the perspective of
      the machine independent vm code. The object represents an address
      space. Machine dependent code can use this object to represents
      whatever struct or data they want, and the machine independent
      will just keep track of the pointer as needed.