Remove single quotes from `fileset` CLI arg in nim provider

It seems that something must have changed in puppet since the time
that the nim provider was originally submitted.  I believe that
puppet may be handling the intepretation of quotes and other special
characters in command line arguments slightly differently than it
used to; The single quotes in the `fileset` argument to `nimclient`
were not being interpreted by the shell, so they were being passed
through to the underlying package manager as part of the package
name... and since very few packages actually have surrounding single
quotes as part of their package name, this was unsurprisingly failing.

Since the current implementations of this CLI execution stuff in
Puppet seem to be handling the grouping of the individual CLI argument
strings more strictly, the provider seems to work fine without the
single quotes (even if the value we're passing to the `filesets`
argument contains a space).
Support RPM version numbers in NIM package provider

This commit adds a call to `nimclient -o showres` prior to installing
a package; this is necessary so that we can determine whether the
package is an installp package or an RPM package.  This is
unfortunately necessary because the installation command for specific
versions of an RPM differs very slightly from the command for installing
a specific installp/BFF package.

We also have to do an unfortunate amount of regex-based parsing of
the output from that command, because I have been unable to find
a command that provides concise, easily parseable output *and* shows
information about both RPMs and BFFs available on a NIM lpp source.
Fix 'ensure=>absent' for rpms

Prior to this commit, an `ensure=>absent` for an rpm package
via the nim provider would result in a call to `installp -gu`,
which is actually only capable of uninstalling bff/installp
packages and not rpms.  This commit adds a call to `lslpp -qLc`
so that we can determine which package type we're uninstalling,
and then branches to call the appropriate command (`installp -gu`
or `rpm -e`) accordingly.
Better detection of version string for NIM package provider

Prior to this commit, if you attempted to install an RPM
from a NIM source using `ensure=>present`, and there were
more than one version of that package available, the install
command would fail because AIX's rpm system doesn't automatically
default to the newest version if it finds more than one choice.
It simply fails with an error message about there being more than
one version available.

This commit adds some logic for detecting the case where more than
one version is available, and if so, it determines the newest
version number and adds that to the installation command.  Thus,
`ensure=>present` can succeed even if there are multiple versions
of an RPM package available.
Fix modification of package command string

As Nick pointed out in a3ef60bc75c33d3309fc3375b7485621d3b4a285,
the way that this code was implemented would have the undesirable
side effect of modifying the value of the provider's `@resource[:name]`
value.  Changing the code from `<<` to `+=` causes the string
to be copied rather than modifying via reference.
Explicitly fail on BFF downgrades in the AIX package provider

Attempted downgrades of BFF packages via the NIM package provider
do nothing because the package is superseded by a newer
version, but still don't exit non-zero. The only way to downgrade is to
force the installation, which requires us to ignore dependencies. As
this isn't palatable, we now explicitly fail if we see that the
package was superseded by a newer version.
Explicitly fail on RPM downgrades in the AIX package provider

Attempted downgrades of RPM packages via the NIM package provider
do nothing because the package is superseded by a newer
version, but still don't exit non-zero. The only way to downgrade is
to force the installation, which requires us to ignore dependencies. As
this isn't palatable, we now explicitly fail if we see that the
package was superseded by a newer version.
DRY up spec tests for nim package provider
(AIX) Fix service resources on AIX (SRC provider)

Prior to this commit the SRC service provider was broken on recent
version of AIX (5.3, 6.1, 7.1). The SRC service provider was not able to
introspect running services nor was it able to enable/disable services.
This commit makes service introspection possible in addition to being
able to enable/disable specific services.

Sprintly: fix item:231, item:265, item:230, item:232, item:273, item:266
(AIX) Allow non-root users to introspect services

Prior to this commit, non-root users were not able to introspect
running services via the SRC service provider on AIX. The underlying
problem is the `commands` portion of the provider DSL was/is aslo
effectively a `confines`. The SRC service provider has many commands
that it uses, but non-root users may only execute about half of them.
This constraint is sensible for starting and stopping services; however,
listing status of services should be able to be done for non-root users,
and this provides feature parity for other platforms like Linux. This
commit alters the `commands` DSL method to the `optional_commands`
method so that the appropriate metaprogramming still happends, but
removes the `confines` portion implicit to `commands`, which results
in the SRC service provider being deemed suitable for non-root users
on AIX.
Improve AIX package provider documentation

This commit just adds a few more details about the meanings of the
various parameters required / supported by the AIX package providers.
Copy AIX NIM provider tests from pe_acceptance_tests repo
Explicitly reference /usr/bin/grep

GNU grep may not support the `-p` option that AIX's grep does, and
that's critical for this provider.  This commit changes the CLI
command to explicitly reference `/usr/bin/grep` to avoid any
potential issue where the user has modified the path in a way that
might make GNU grep the default.
Fixes and cleanup based on pull request feedback
Merge pull request #1450 from cprice-puppet/feature/aix/nim_package_provider

Feature/aix/nim package provider
Merge pull request #1463 from cprice-puppet/maint/aix/copy-nim-provider-acceptance-test

Copy AIX NIM provider tests from pe_acceptance_tests repo
Merge pull request #1462 from cprice-puppet/maint/aix/aix-package-provider-docs

Improve AIX package provider documentation
Minor rewording of AIX package provider docstring
(AIX) Create acceptance tests for src provider

Prior to this commit, the acceptance tests for AIX's src service
provider were barely a shell of a test. This commit tests that the
service provider can
 * find a specific service
 * start the service
 * stop the service
 * enable the service
 * disable the service

The tests were also refactored to use the puppet_acceptance `teardown`
portion of the DSL so that if a test step fails, the temporary service
will be removed prior to the next test run, especially important because
the setup section will fail if the service exists already as AIX's
`mkssys` does not have a way to override the state of an existing
subsystem (service).
Merge pull request #1461 from jeffweiss/ticket/aix/231_fix_service_resources_on_aix

(AIX) Fix service resources on AIX (SRC provider)