Warn when rules and target names clash

This is needed for the scripting interface to work directly, and
to avoid messages about shaddowing when attaching environments.
However, I don't think it's worth an error because everything else
will work fine.  So we just warn.  Most of this commit fixes tests
that had a target/rule clash!
Remember if arguments were quoted or not.

Here, "quoted" means almost the opposite of what parse means: it means
that the dependency was written as a character string.  We'll use this
to enforce file dependencies being given in quotes and objects without.