Add a --log option to trace slave node state changes.

This allows some interesting insights into the current state of zeus
nodes when various things happen.
Restart children only once their parents have exited

This should prevent fast children from trying to spawn from parent
that haven't yet realized that they need to restart. This would
sometimes cause the newly-spawned child to be forked from the wrong
code base, and sometimes caused the child to become unresponsive &
stuck in booting/connecting states.
Aggregate file changes that happen within an interval

AKA, the "git checkout" scenario: If many files change at the same
time, this should ensure that the processes get restarted only once,
at the end of the checkout. This should reduce the gettting-wedged
potential considerably for large process (and file) trees.

* Move file change code into its own module outside zeusmaster and
  aggregate all changes that happen within a configurable interval of
  the first.
* Add restarter.FileChangeWindow variable (defaulting to 300ms) that
  controls how long to wait for all file changes to come in.
* Add --file-change-delay command line option, document it and --log
  in the man page.
Rework the child-boot logic to better deal with state fluctuations

When a child has to restart, it would previously actively wait for the
parent to enter the "Ready" state - although that parent would not be
ready to boot that child yet.

To fix this, add two channels each slave node: One to request
permission to boot from the parent, and the other to allow answers
from the parent back to the child. Now, the parent can answer these
boot requests as soon as it's ready, vastly reducing the amount of
deadlocked processes after large-scale file operations (like after a
`bundle install` or a `git checkout some-other-branch`).
Unify trace logging for slave nodes

This should make it a bit easier to tell what's going on:

* Show node name & pid on all log lines
* On every log line, include the file&line that initiated the trace
Add slog.TraceEnabled() function

Should make it easier to shortcut out of the (*SlaveNode).trace
Send root process to SCrashed if it dies while unbooted

This one is a bit tricky: Sometimes when running under bundle exec
under some ruby projects, the root process could fail to start up
while it's getting restarted. In that case, the root process tree node
wouldn't budge from SUnbooted without the ability to get restarted
even if its dependencies changed.

This change makes the babysitter process watch out for
unexpected (that is, non-"signal 9") crashes and nudges it into
SCrashed if the crash happened in SUnbooted.
Merge pull request #323 from antifuchs/less-errorful-restarts

Improve behavior on restarts for multiple changed files