move #undefs for syscall_defs.h macros to syscall_defs.h

Having these lists repeated wherever we use syscall_defs.h doesn't seem
like good practice.  It reduces clutter, especially with upcoming
changes to handle undefined syscalls in syscalls.h.  It's also easy to
miss undefining a macro (which, admittedly, is normally harmless).
add syscall numberings for x86-64

x86 and x86-64 have different syscall numbering orders.  Additionally,
x86-64 doesn't have syscalls that x86 does (usually because having
${SYSCALL} and ${SYSCALL}64 is redundant for x86-64).

Therefore, this patch does three things:

1. Introduces a SYSCALL_UNDEFINED_${ARCH} mechanism for handling
   non-existent syscalls on a given platform.
2. Adds a SYSCALLNO_X86_64 macro for similar purposes as the current
   SYSCALLNO_X86 macro.
3. Sprinkles SYSCALLNO_X86_64 macros about syscall_defs.h and related
   places.

Ideally, we'd check that syscall numbers defined after
SYSCALL_UNDEFINED_${ARCH} didn't have a corresponding SYS_foo
definition, but C++ makes that difficult.  I also haven't yet figured
out how this extends to the CHECK_SYSCALL_NUMBERS bits in
replay_syscall.cc.
move SyscallsX86 into x86_arch

...and rename it Syscalls instead.  Syscalls are part of the ABI, so
it's good sense to do this.
Make Syscalls enum non-'enum class'.

This simplifies usage of the enum values; you can use 'Arch::readv' instead
of 'Arch::Syscalls::readv'. You also don't need to explicitly cast values to int.
0 is a valid syscall number for x86-64 so map unknown syscalls to a large unused syscall number instead.