Updated with changes by John Noll

Error reporting facility, moved to error.[ch].
Silenced error_msg() for unit tests.
Fixed null-valued attributes; implemented QUALIFIER hack.

* Attributes with no value are now bound to '{}' (empty TCL list) so
they will yield something when de-referenced.
* QUALIFIER trees are translated into ID_TREEs.  This is
a hack that ignores qualifiers altogether.  However, it's not clear
how qualifiers should be implemented:
requires {foo && (optional) bar}
should be true regardless of whether bar exists, while
requires {foo || (optional) bar}
should be true only if either foo or bar exist.  So, implementing
(optional) as a TCL procedure requires that it to always return true if
called
from an AND tree, and false if called from an OR tree and the resource
doesn't exist.