add helper functions for multi-architecture syscall numbers
use X86Arch everywhere in is_always_emulated_syscall
add an easy way of getting arch from AutoRemoteSyscalls
use new arch-specific syscall helpers for guaranteed-to-exist syscalls
make RR_ARCH_FUNCTION more robust in the non-presence of |using namespace rr;|
use templates for process_syscall in diverter.cc
use mmap or mmap2 as appropriate for the architecture

Older systems like x86 had an mmap syscall that took a byte offset for
the sixth argument.  However, doing so meant that large files (> 4GB)
couldn't be mmap'd.  To address this, a replacement mmap2 syscall was
created that took its offset in units of pages, rather than bytes.

x86-64, however, has no problem with using byte offsets, and therefore
has no mmap2 syscall.  So we need to use the appropriate syscall for the
architecture of the process we're tracing when making remote syscalls.
use templates for Task::maybe_update_vm
Automated reformat.
Make args_env::argv/envp a simple vector of strings without a terminating nullptr.
Move vector<string> construction out to `record` function.
Move args_env creation and writing into TraceOfstream::create.
Store args_env state directly in TraceStream and expose it via getters.
Remove global 'ae' and stop passing args_env to Task::spawn; it can get the data directly from the trace now.
Move reading of args_env data into TraceIfstream::open.
Move CharArray to its own StringArrayToCharArray class with header file.
Remove args_env.
Use TraceFrame::Time in a few places.
Embed TraceOfstream instance directly in RecordSession.

shared_ptr is not needed here.
Make RecordSession include a TraceIfstream member directly.

shared_ptr is not required here.