(PUP-1174) enable the purging of authorized ssh keys

Purging authorized ssh keys is difficult because there is no way know
where key files may be located. Users commented that for most it should
be sufficient to clean the keys from users that puppet manages.
John Bollinger suggested a design that's based on a new parameter to the
user type. There are two ways to use it:

user { "name": purge_ssh_keys => true }

to make puppet purge from the default ~/.ssh/authorized_keys file, or

user { "name": purge_ssh_keys => [ "/etc/keyfiles/name" ] }

to specify one or more files in non-standard locations.

The implementation is similar to the file type's purging code. The user
type now has an eval_trace method that searches the specified files for keys
and adds any unmanaged keys to the catalog with ensure => absent.
(PUP-1174) amend resources type documentation

Add a reference to the new purging feature to the documentation of the
resources type description.
(PUP-1174) add tests for the purge_ssh_keys parameter of the user type
(PUP-1085) Make Pacman provider group-aware

The Archlinux Pacman package manager has a concept of package groups,
which due to the provider not checking for a group being installed
caused all contained packages to be reinstalled.

This commit uses `pacman -Qg` in addition to `pacman -Q` to check for
installed groups.

Because groups don't have versions this will still cause all packages in
a group to be reinstalled if ensure is set to latest.
(PUP-1905) Split modulepath when supplied as an override from CLI

When a --modulepath option is supplied from the CLI to override the node
environment's modulepath, it can be made up of multiple directories with a
path separator.  The path is now split so multiple paths are correctly
searched.
Merge pull request #2426 from domcleal/tickets/master/pup-1905-multiple-modulepaths

(PUP-1905) Split modulepath when supplied as an override from CLI
(PUP-1085) Add and fix pacman provider tests

- Added a test for the installedgroups function
- Fixed behaviour of instances function
- Pointed a test for code that has moved at the new function
Merge branch 'pr/2403'

* pr/2403:
  (PUP-1085) Add and fix pacman provider tests
  (PUP-1085) Make Pacman provider group-aware

This closes GH-2403.
Merge pull request #2247 from ffrank/ticket/master/1581-purge-all-ssh-keys

(PUP-1174) enable the purging of authorized ssh keys
(maint) Fix face_collection_spec to properly restore global state.

The spec attempts to restore global state stored in
Puppet::Interface::FaceCollection so that it doesn't interfere with
other specs that may use faces.

It fails to clear any files required by the autoloader, but clears the
@faces member.  The result is that if a face is referenced again from
another spec, it doesn't get defined and added to @faces and cannot be
found.

The fix is to clear the state before and after each example.

The problem can be observed with the following:
rspec spec/unit/interface/face_collection_spec.rb spec/unit/application/face_base_spec.rb

This closes GH-2422.
(maint) Use provider property accessors in the Cron type

ParsedFiles is the only provider which actually creates an accessor to expose
the internal `@property_hash` of provider instances. This patch replaces
uses of `property_hash` in the Cron type with the `target` accessor method that
providers define for the `target` property.