Throw an object, not a pointer...
Add a SharedPtrVec 'using' directive.
Keep track of the current value name.
Add Ninja support for build rules.
Need a newline between 'build' line and arguments!

RegressionTest: backends/ninja/compile-arguments.fab
Test compile arguments in the DAG.
This function is in the fabrique namespace!
Require actions to define their parameters.

In addition to arguments that define the action --- e.g. cc = action(command = '$CC') --- we must also define the parameters that an action takes. For instance:

cc = action('$CC $defines -c $in -o $out' <- defines:string)

In addition to being good hygiene, this explicit specification allows us to expose all of the files that should be involved in the dependency graph. For instance, we can pass the --header-file argument to yacc in order to specify where the output header should go; this header should be part of the dependency graph.