Clean up build dependencies.

There's no need to rebuild everything every time we touch Parsing/fab.yy. Binary and unary operations don't actually need a CStringRef, which is really a parsing thing (and should move out of ADT).
Add Bytestream::None().

This returns a Bytestream that dumps output into a do-nothing std::ostream.
Add debug stream handling.

When a caller asks for the debug stream, return either a target Bytestream (Bytestream::Stderr() by default) or Bytestream::None(), depending on the name that is passed to Bytestream::Debug().

For instance, when Fabrique is run with --debug=*, all calls to Debug() will return the real output stream. When run with --debug=parser, Debug("parser.foo") will return the real stream but Debug("dag.bar") will return the do-nothing stream.
Drop Expression::isStatic().

We really don't need this.
Make HasSource and Typed mixins, not interfaces.

Rather than re-implementing HasSource and Typed in several places (not always constantly!), do it in one mixin type.

This eliminates the syntactic difference between ast::Expression::getType() and dag::Value::type().
Rename HasSource::getSource() -> source().

This is the preferred style: like in Qt, accessor names should just be the thing being accessed.
Use helper function, don't re-implement it!
Rename Location -> SourceLocation.
Don't print newline in Value.

Let the containing scope print the newline: the value itself might be as simple as "foo = 'hello';", which can be presented in the parser as "parsed foo = 'hello'; @ foo.fab:12:1-42".
Rename Scope::Find() to Lookup().

This is about looking up a symbol, even if it is found in a parent scope, so Lookup is a more appropriate name.
Clarify AST memory ownership.

Ensure we always know who owns what memory through the liberal use of std::unique_ptr. This should take care of all our funny pointer problems.

Unfortunately, this commit touches almost everything, including adding new files to handle certain types of ownership.
Fix expected output from operators test.
Output more information about the parser.

These command-line arguments are a bit cryptic, but they mean:

  -d   write a header file with yacc identifier #defines
  -g   output graphical parser description as a .dot file
  -t   output debugging statements in generated parser
  -v   output a human-readable parser description
Allow manual addition of CXXFLAGS in bootstrap.
Add (missed) parsing test for conditionals.
Do primitive DAG storage uniformly (in Primitive).

Rather than implementing value storage just about identically in in every Primitive subclass, just do it in Primitive.
Add ast::Conditional accessors.
EnterScope when we enter a compound expression.

We are definitely going to ExitScope(), so we need the corresponding entry!
Drop redundant braces in Conditional::PrettyPrint.

CompoundExpression::PrettyPrint always outputs braces now, so these braces are just redundant.
Improve scope debugging: give scopes names.

These aren't unique names, but they do help with debugging.