Rename Parser::Token -> Parser::ParseToken.

This avoids shadowing the Token class.
Add OSError and UserError.

These exceptions mean that something has gone wrong, respectively, in an OS-defined way or interpreting the user's input (e.g. command line).
Add Fabriquer support for Vim and Pygments.
Add some OS-specific support functions.

These are only implemented for POSIX at the moment.
Specify output directory, not filename.

At the command line, users ought to specify where they want their build to go (the build root) rather than what filename should be generated. In particular, there's not guarantee that a multi-file build won't be generated.
Add srcroot and buildroot builtins.

These builtin variables describe where a build is coming from and going to.
Add a DAG Visitor interface.
Provide copy constructors for exceptions.

New versions of Clang warn about using implicitly-defined copy constructors together with explicit destructors (and we need explicit virtual destructors because we have virtual functions).
Fix more warnings from recent Clang.

Printable needs an explicit copy constructor and assignment operator: it is deprecated to use implicitly-generated ones with an explicit destructor (and it's not recommended to use a non-virtual destructor when there are virtual methods).

flex/byacc generate code with the 'register' keyword, but this is now deprecated, so mask this warning on all generated code.
Add Formatter, a dag::Visitor that makes strings.

This lets us be more precise about our formatting, rather than relying on various str() methods.
Add fabrique::FileExists().
Allow FileExists() to look for directories, too.
Store srcroot, buildroot in FabContext and DAG.

Also store the FabContext in our DAGBuilder, eliminating the need to store at least one type reference.
Let dag::File objects know if they are generated.

A generated File has a fullName() of '$buildroot/foo.c'; a non-generated (source) file has '$srcroot/foo.c'.
Teach backends about File::fullName().
Fix files() subdirectory support.
Allow DirectoryOf() to work with absolute paths.
Let the srcroot be absolute.
Specify output directory, not file.
Add PathIsAbsolute() to OS support library.