(#7911) Allow managing local groups when duplicate names exist in a remote NSS database e.g. LDAP.

Some applications require local accounts and the useradd/groupadd commands currently used by the provider will not create a local account if they already exist remotely.  The libuser commands luseradd/lgroupadd will allow a local name to duplicate a remote name.  So these commands are used to force the local account creation.  The libuser commands parse /etc/libuser.conf to determine which modules to use for creating users.  Files must be the module used to get the desired local account managment.  Because of this, it is necessary for Puppet to ship a libuser.conf file, which will only be used during a Puppet run, to ensure local account managment.  The libuser.conf file used by the luseradd/lgroupadd commands can be overrideen by setting the environment variable LIBUSER_CONF. Which is what Puppet does to make sure its version of the configuration file is used
(#7911) Added support for managing local users.  Also created Puppet::Util::Libuser for better reuse of common code.
(#7911) Removed function def libuser_conf which was made obsolete by Puppet::Util::Libuser
(#7911) Stabalized providers when using libuser commands so it would behave identical to the existing providers

Performed exhaustive analysis of the differences between useradd/groupadd and luseradd/lgroupadd and coded around these differences to ensure that the useradd/groupadd providers behave identically with and without the forcelocal parameter being set.  The only difference being a local account is always created and managed when forcelocal is set to true.  The commands are very similar for the most part so there was not a huge need to diverge from the original code.  In all but one of the cases that did arise the solution was to make a subsequent usermod or groupmod call after the luseradd/lgroupadd command.  Since the usermod/groupmod commands will always act on local accounts first, this achieves the desired effect. The one case where a subsequent call would not suffice was the use of the allowdupe parameter. By default libuser will allow duplicate uid/gid where useradd/groupadd require an explicit -o.  The work around was to manually do a local check for a duplicate if using the libuser library and not intending to allow duplicates.  If a duplicate is found Puppet raises a DuplicateUID or DuplicateGID exception.
(#7911) Fixed failing spec because of invocation of function increase
(#7911) Removed custom exception class for duplicate UID/GID.  Using Puppet::Error now