Provide a default value for C++ flags.
Add TypeContext::integerType().
Fix C-style casts.

The new version of Clang warns about these things!
Teach expressions how to self-evaluate.

Refactor AST Expression evaluation out into each of the individual
Expression subclasses. This is required in order to use constant
expressions in parsing, e.g., as the argument to import().
Test function default parameters.

We’ve supported these for a long time, but we don’t test them.
Add support for trace points.

By putting ‘trace()’ around an expression, we can trace its value at runtime. This should make it easier to debug things.
Trivial: fix file header.
Filename component of empty string is “”.

No matter what POSIX basename() may return, we want the filename and directory components of “” to both be “”. This facilitates values like subdir.subdir.subdir + ‘contrib/foo’.
Start adding string manipulation functions.
Add support for multiple backends.

We can now run `fab --format=dot --format=ninja` or just `fab --format=dot,ninja` in order to produce both a Dot file and a Ninja file.

We could also produce make and ninja files simultaneously, but I’m not sure that would be terribly useful.
We don’t need iostream in Bytestream.h.

We only need the declaration of ostream&, not std::cout, etc. We do need everything in Bytestream.cc, however.
Refactor “get the backend” logic out into Backend.
Rename fabfiles to ‘fabfile’.
Print the full relative filename in dot graphs.

Sometimes we end up with several files called “fabfile”, but in different directories... we must be able to distinguish these.
Prefer relative names for fabrique input files.

If a Fabrique input file is underneath the srcroot, use its relative name.