(maint) Remove failure for empty generated tags

Commit 0436eb1e0997a6f19ea734923a1b82625a4034f8 added an extra failure
condition for any generated tags that end up being empty strings. This
was to get it to handle that the same way that it handles a simple empty
string tag. However, this could break any installations that generate
"::" separated tags that could create 4 ":" in a row ("a::::b"), and it
also doesn't address enough of the odd tagging behavior to make it worth
it. This commit reverts that change and adds some more tests to cover
some more of the ways in which setting tags behaves.
Merge branch 'pr/2712' into stable

* pr/2712:
  (maint) Remove failure for empty generated tags
  (maint) Update test to use resource matcher
  (PUP-2689) Make AST Resource check tags against "inherited" tags
  (maint) Remove unused Puppet::Parser::AST::Tag class
Merge remote-tracking branch 'upstream/stable'

* upstream/stable:
  (maint) Remove failure for empty generated tags
  (maint) Update test to use resource matcher
  (maint) Add sitemoduledir to env env tests
  (PUP-2689) Make AST Resource check tags against "inherited" tags
  (maint) Remove unused Puppet::Parser::AST::Tag class
(PUP-2583) Fix bad test case in file type mode acceptance test.

The test case was assuming that +X on a file would always set the
requested executable bit.  This is only true if the resource is a
directory and not a file.  For files, there must be an already set
executable bit in the permission for +X to have an effect.

There was a bug in Puppet that was causing this acceptance test to pass
with the incorrect assumption.  That bug was fixed in commit ac2622e8c1
and now the acceptance test needs to be updated for the correct behavior.
(maint) Update docs badge in README

Update the URL of the docs badge to include it from
inch-ci.org instead of inch-pages.github.io (the former
being the successor of the Inch Pages project).
(PUP-2454) Use 999 as the max system uid for certain operating systems.

User ID's below 1000, not 500, are generally considered system users on
OpenBSD, FreeBSD, and Debian operating systems.

Users can still modify this with 'uid_start' in adduser.conf, but in that
case they'd need to provide an actual value instead of 'true'.

Also fixing the fact that 500 should not be included as a system ID.
The inclusive maximum should be 499 for other operating systems.
(PUP-2710) For audit only, compare Time objects as strings

Previously, auditing the mtime or ctime properties of a file
on ext4 (or any nanosecond resolution filesystem) when running
under ruby 1.9+ would spuriously report a change on every catalog
run.

This was because the yaml library (or libraries, more on that
shortly) correctly serialize the nanosecond resolution of the Time
object to yaml, *but* on deserialization they produce a Time object
truncated to microseconds. This led to a false inequality operation
leading to the spurious audit messages.

This patch is an unfortunate hack consisting of special-casing
the comparison of Time objects in the audit equality operation.

For context, I also considered alternatives:
* Monkey-patching the Time object == method to ignore nanoseconds.
  But this would affect all Time objects and could have undesired
  consequences.
* Monkey-patching the yaml library to correctly deserialize. But
  this got messy because there are several different yaml libraries
  that may be involved.
* Intercepting the serialization in Puppet::Util::Yaml, but this
  would mean discarding nanoseconds for all serialization of Time
  objects to yaml.

In the end, this spot fix seemed like the least evil solution.
Merge pull request #2733 from rrrene/patch-2

Update docs badge
(PUP-2364) Use the the puppet config vardir setting

instead of the beaker variable puppetvardir.  This change, while
pleasing in and of itself, was needed for testing on AIX.  The vardir
used there by puppet is different, and Beaker does not track a separate
set of defaults for AIX.
Merge branch 'pup_2364_spike_vars' into stable

* pup_2364_spike_vars:
  (PUP-2364) Use the the puppet config vardir setting
(PUP-2650) Add :array setting type
Merge pull request #2706 from nfagerlund/docs_metaparam_header

(docs) Edit header of metaparameter reference
(doc) Recommend git checkout -b in CONTRIBUTING.md

git checkout -b is equal to git branch && git checkout.

Closes #2737.
Merge pull request #2718 from scop/usage-messages

(doc) Add some missing options to apply/agent/doc/queue usage messages
(PUP-2454) Add spec examples for testing unless_system_user special casing.

Adding examples to test for handling unless_system_user being
automatically set to 999 on certain operating systems.

Changing an existing example to ensure that user 500 is purged
correctly.
Merge pull request #2719 from razalas/issue/master/pup-2506-trivial-ruby-bug-in-puppet-resource-ral

(PUP-2506) Error when evaluating #type in Puppet::Error message interpolation for Puppet::Resource::Ral
Merge pull request #2717 from razalas/fix/master/remove_code_duplication

(maint) Consolidate case statement in /pson/pure/generator.rb for the Fl...
(PUP-2569) Revoke all certificate matching a given name

puppet cert revoke <name> was revoking only the first certificate
when the certificate file wasn't present on the system.
This patch makes sure all issued certificate matching a given name
are now revoked.

Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
(maint) Reduce redundancy in Puppet::Util::Posix

Before this commit `Puppet::Util::Posix` had duplicate error
handling code for retrieving the actual ID, either of a group or
user. This commit refactors those two methods to abstract away
the location of the source of truth, either the `group` file
or the `passwd` file, and the logic for handling whether or not
a numeric ID or a name was passed in.
(maint) Move duplicate code in /lib/puppet/provider/service/freebsd.rb into single method

Prior to this commit, service_name and rcvar_name contained duplicate
code in lib/puppet/provider/service/freebsd.rb that accomplished the
same thing. This commit moves this code into a single method that
can be invoked from both service_name and rcvar_name.