Move around scratch-buffer init so that it replays correctly after exec().

The problem was that during replay, the tracee isn't able to inject
syscalls at the execution point where USR_SCRATCH_INIT was being
replayed.  So the scratch segment wasn't being mapped, and the
recorded vs. replayed address spaces were different.  There was a
fairly long chain of code hiding the mmap() failure, which is now
assertioned-up.

This patch also removes some dead code and fixes a bug in macro
argument processing.

After this patch, checksumming works ... and we hit a checksum error
on the |printf("Hello world")| test.  So still some work to do.