Introduce arch_interface to abstract architecture specific functions away

This PR contains a variety of changes in preparation to support the ARM architecture in the future. Most importantly this PR introduces the arch_interface to abstract v2p and get_va_pages routines away from the rest of the library. The interface is setup similar to the os interface and the driver interface.

The functions from memory.c had been split into intel.c and amd64.c within the arch folder respective to which page mode they are involved in. A couple functions that were shared between x86 and x86_64 are converted into macros within arch/x86.h

Another set of functions from memory.c had been placed into accessors.c as that is a more logical place to keep them as they aren't architecture specific.

What has not been touched is stuff in SHM_SNAPSHOT, specifically in the KVM driver, where those functions are performing architecture specific address translations. I really do think SHM_SNAPSHOT needs a heavy cleanup, as the KVM driver doesn't look like the right place to keep those routines.

RFC