Make sure that nodes with nil facts/metadata/state do not case an internal error

When a node had nil facts/metadata/state, the matcher could fail by trying
to call nil.[] in value_lookup; this change makes sure that doesn't happen,
and that evaluating ("fact" "foo") against a node with nil facts actually
raises a RuleEvaluationError

This change also adds some light testing for Tag#match? as that is the main
user of matchers

Issue: https://tickets.puppetlabs.com/browse/RAZOR-254 (partial fix)
* spec/data/tag_spec.rb: check that Tag.match raises when rule eval fails

Other things, especially Node.checkin depend on that behavior; out of
overabundant caution, add a test for that. It is also checked indirectly in
the tests for Node.checkin
Tag#eval_nodes should catch rule evaluation errors and log them to the node

When matching against a node fails for some reason, we want eval_nodes to
continue to evaluate against other nodes; to make it possible for users to
spot problems, we log the evaluation failure into the affected node's log.

Before this change, eval_nodes had raised the RuleEvaluationError causing
the background processing for update-tag-rule to fail in its entirety with
no indication to the user what exactly was wrong, other than a cryptic
entry in the server log

Issue: https://tickets.puppetlabs.com/browse/RAZOR-254 (final change)