Consolidate architecture definition

Create a new definition for the architecture.  This allows us to use the same
definition irrespective of the compiler used.  MSVC defines _M_* macros, whilst
gcc and clang define __*__ macros.  Adjust the codebase to use the new ARCH_*
macros defined in Base.h.