check-stack: Fix weird corner case with 128 byte stacks

When GCC emits a function with a 128 byte stack, it generates
  add    $0xffffffffffffff80,%rsp
in the prologue and
  sub    $0xffffffffffffff80,%rsp
in the epilogue rather than the more obvious sub $128,%rsp and add
$128,%rsp because, thanks to sign extension, these instructions are
one byte shorter.  This was, unsurprisingly, tripping up check-stack,
so handle this case.
trap: Don't declare 'trap'; C code should never call it
trap: Split trap into trap and trap_c; simplify teardown

trap_c handles high-priority traps (NMI and double fault), as well as
setup and teardown for most traps, while trap contains the regular
handling code for each trap.  This makes it easier to have common
teardown code before exiting from trap handling.  As a result, this
can unify several places where we popped the mtrace stack into one
place, which fixes some mtrace stack leaks (we still leak one stack
slot when a process is killed for reasons I don't understand, but
arguably that's the one case where it's harmless).
hpet: Fix boot-failure with newer versions of QEMU

With QEMU 2.0.0, sv6 panics on boot like this:

acpi: Resolving IRQ of 00:04.00 pin A
acpi: PCI device 00:04.00 has ACPI handle \_SB_.PCI0.S20_
acpi: Found _PRT on \_SB_.PCI0
acpi: Matching entry: PRT{Pin=A Address=0x4ffff SourceIndex=0 Source=\_SB_.LNKD}
acpi: Enabling PCI link \_SB_.LNKD
ioapic: Routing IRQ 11 (level high) to APICID 0
AHCI: done
hpet: At 0xfed00000, revision 1, period 10 nsec, 3 timers
cpu0-idle_0: panic: Assertion failed: !used_ticks, function u64 nsectime(), file kernel/condvar.cc, line 30
  ffffffffc010d912
  ffffffffc01661f7
  ffffffffc0132889
  ffffffffc010008a

It appears that the hpet initialization is a bit too late. So move it to
the point right after inittrap(), to fix this. Thanks to Austin for
suggesting the fix!
bin: Give usage instead of crashing for various commands

Previously, some commands which took commands as arguments would
blindly pass argv+1 to exec, causing these commands to crash with an
unsightly message like
  pagefault: failed in kernel (addr 0x0 rip 0xffffffffc015c3d6)
  monkstats: exec failed

Fix this by checking for sufficient arguments and printing an error.
trap: Clarify pagefault error messages

Previously these looked like something had gone wrong in the kernel,
when in fact this was about a user-space problem.
bin: Clean up sub-command handling

Several commands take commands as arguments.  Previously, many of
these simply passed their argument vector directly to exec.  However,
while this *almost* always works, there's no guarantee that this list
will be terminated with a NULL pointer, as required by exec.  Fix this
by copying the arguments into a std::vector and appending nullptr.
bin: Oops, remove extra \n after usage messages