Generalize an error message.

We’re about to make things other than structures have fields.
Use pointer-based dynamic_cast.

This doesn’t require multiple levels of try-catch when we add more kinds of things that have fields.
Trivial: use more-qualified #include filenames.

We already do this is most places.
Refactor “having named children” out of ast::Scope.

Other things are about to grow the ability to have field-like named children.
Remove unnecessary #include in a header file.

We don’t need to include AST/Argument.h from AST/Filename.h: a forward declaration will do.
Trivial: prefer `nullptr` to `NULL`.
Implement (some) file attributes.

Allow simple operations like `some_file.name` or `some_file.arg`, where `arg` was passed to file(). This works with the existing field query syntax, so you can write things like:

`cflags = default_cflags + (source_file.cflags ? []);`

This partially address Issue #7, but it won’t be completely fixed until we support fields like subdir and generated.