(#11675) Remove duplicate flag on useradd

The check in the useradd provider caused puppet to add the expiry flag
twice when adding a user.

The addproperties method does already add the expiry flag to the
argument list. The default flag (dash and first letter of the property)
does also match what useradd expects, so everything just works "out of
the box".

The old method does also caused puppet to pass "-e EXPIRY" as ONE
argument instead of two. Kind of surprising that useradd actually does
not complain about that.
maint: Add specs for password min age/max age
maint: Improve test coverage for nameservice provider

The nameservice provider lacks a spec file so I tried to cover the most
important methods.

The changes to the nameservice provider itself do not imply any functional
changes or changes in behaviour and are just there to make writing specs
easier.
(#11675) Add value munging for nameservice provider

The nameservice provider defines a helper method `options` to specify
the flag for a property that will be used when creating the appropiate
useradd/usermod commandline. This commit now adds the options `munge` and
`umunge` to define methods that will automtically transformed the
property value when building the useradd/usermod command or when
retrieving the current value.

This munging is realized at a provider level so a unified value can be
used at a resource type level to represent different values at a
provider level.

One future use case could be the expiry property. We can define a value
of :absent at a resource type level to represent "account should not
expire" and represent it as '00-00-0000' in the pw provider and as ' '
in the useradd provider.
(#11675) Implement expiry in user provider

The useradd and pw provider claim to support expiry of user accounts.
And while they seem to be able to *set* the expiry, they don't seem to
implement any way to *get* the current value.

While this is still true for the pw provider (I am not familiar with
AIX) it should now work correctly with the useradd provider.

The expiry property uses munging at a provider level to convert
correctly to and from :absent (useraccount should not expire).
(#11675) Refactor useradd provider

The useradd provider is a subclass of the nameservice provider and all
the property retrieval and property installation is handled in the
nameservice class.

This works for most properties but does not work for properties that can
be installed with usermod but cannot be retrieved with Etc.getpwnam. The
useradd provider defines special getter methods for these properties
(password_max_age, password_min_age, password, expiry). Because all of
these more or less look exactly the same we can remove duplicate code.
Merge branch 'stschulte-ticket/master/11675_implement_expiry_retrieve'

* stschulte-ticket/master/11675_implement_expiry_retrieve:
  (#11675) Refactor useradd provider
  (#11675) Implement expiry in user provider
  (#11675) Add value munging for nameservice provider
  maint: Improve test coverage for nameservice provider
  maint: Add specs for password min age/max age
  (#11675) Remove duplicate flag on useradd
Merge remote-tracking branch 'upstream/master'