Fake Queue matcher: do not raise an exception when checking an empty queue

When the queue is empty and a test calls have_published, the test would
fail (as it should) but with a confusing error message about nil not having
a map method.

This change makes sure that we properly complain about the missing publish
in the test failure
Make sure update-tag-rule retags all affected nodes

This issue was cause by two cooperating bugs:

  1. In Razor::Data::Tag#around_save we used 'or' instead of '||' in
  setting need_eval_nodes which would be false if the rule for a
  preexisting tag was changed, and therefore eval_nodes would never be
  called. Ultimately, this is because 'a = false or true' sets a to
  false. Go Ruby.

  2. The spec test always caused an 'eval_nodes' message to be published
  when it created the tag it was testing with. We now clean out the queue
  after the tag is created to make sure we only succeed if the operations
  in the test cause a message to be published

Issue: https://tickets.puppetlabs.com/browse/RAZOR-250