Correct the definition of a macro

The macro was not in use previously.  A missing closing parenthesis results in
the file being unusable.
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.
Use __FUNCTION__ instead of __func__.

This is supported by more compilers.