Implement the "deepfork" feature to copy a tracee tree, and use it to ma...

...ke debugger restarts faster.

"Deepfork" means making a copy of every tracee process/task/file
that's independent from the original.  Deepforking is used to make
checkpoints of replay state, in which one of the copies can be
advanced/mutated/whatever without affecting the other.

With this patch, a checkpoint is made when the debugger is attached
during replay.  In the common case, when the user issues the
debugger-restart command, then rr will simply resume executing with
the checkpoint without doing any extra work.  There are many more ways
checkpoints can be used to good effect.

There are numerous subtleties in this (mega-)patch, but an attempt was
made to document them in the code.

Resolves #603.