Add a 'tested' target that does 'redo-ifchange test'

'redo tested' will only run tests if something has changed in the tests or
the redo source, otherwise just returns true right away.
Temporarily removed locking and parallelism.

Still passes all tests.  This simplifies the code a bit so I can do some
heavy refactoring; I'll have to bring parallelism back again later, but
it'll probably look totally different.
Huge rewrite to change to file-based dependency tracking.

This is definitely not in its final form, but it seems to be a working
version of redo using per-file dependency tracking in flat text files
instead of in a big toplevel .redo database.  The new design has several
neat characteristics, including that you can move whole subdirs around
and the dependency tracking information shouldn't get upset at you.

Problems remaining in this version:

 - the "runid file" stuff is very strange and probably has bugs.
 - output when checking dependencies that include redo-stamp'd files
   is not very clear, unlike in the old version which would print
   (parenthesized) target names.
 - --shuffle, -k, and especially -j are currently ignored (ie. there's no
   parallelism feature!)
 - redo silently returns success if you try to build a target that doesn't
   exist.
 - it leaves temp file droppings lying around sometimes.
 - it's not speed optimized anymore: it stats and re-stats the same files
   over and over.
 - there are lots of FIXMEs scattered around the code.  A lot of the FIXMEs
   were equally applicable before, but at least now they're marked.  I've
   spent a lot of time trying to clean up the code to make it more readable,
   but it still isn't until most of those FIXMEs are fixed.
Eliminate state.File.nicename().

Nowadays it's just an alias for File.name anyway.
state.File: remove extra constructor parameters.

Nowadays we only create a File given a filename, so we can remove the extra
parameters and simplify things a bit.
state.py: add File.printable_name().

This is a nicer way of normalizing paths so we don't get ugly '..' in the
output, yet are still responsive in case there are symlinks.
state.py: additional docstrings.
deps.py: remove obsolete is_checked() and set_checked() functions.
log.py: do the %-formatting so callers don't have to.

This takes a hint from the 'logging' module in python: the syntax of calling
the log functions is nicer this way, plus for debug messages, we avoid the
overhead of formatting the actual string in times that we're not going to
use it anyway.
builder.py: use File._file() (renamed to tmpfilename()) for temp filenames.

I had accidentally implemented the same algorithm twice.  Might as well just
reuse it.
builder.py: rename ffd->tmp1_fd and f->tmp1_f

Very slightly more readable, especially since in a bunch of other places, f
was a state.File object.
builder.py: rename t->target_name and sf->target.

Now it's almost actually clear what the heck is going on!  Magic.
state.is_missing(): fix a missing case.

This caused redo to silently *not* fail when there was no way to build a
given file, and that file didn't already exist.
clean.do: clean up .redo files for sanity.
redo-sh.dir.do: oops, we weren't actually renaming redo-sh.tmp to redo-sh!

(This only affects my rewrite branch, so normal people shouldn't have seen
it.  It was breaking install.do though.)
builder.py: bring back the --old-args option.

I deleted it during the rewrite, for no good reason.
state.py: bring back the --shuffle option.

I deleted that one for a good reason - the code for it was in a weird place.
Now it's in a different weird place, but it's back.
Bring back the --keep-going flag.
Merge branch 'master' into simple

* master:
  minimal/do: some shells return error in "read x <file" for empty files.
  minimal/do: fix a really scary bugs in "set -e" behaviour.
  Add a test for install.do.
  Add a test for --keep-going option.
  Add a test for --shuffle option.
  Rename 111-compile to 111-compile2.
  t/100-args: add a test for --old-args feature.
  t/350-deps: 'redo clean' was crashing.
  t/201-fail: add a simple test for non-existent source files.
Fixed: problem when depending on two targets redo-always using redo-stamp

Added test case.

Updated redo-ifchange to continue probing for dirty sub-targets until no
sub-targets are found anymore and either the current target is dirty, or
is clean.