(PUP-1451) Make SSL file permissions a bit more relaxed for public files
(PUP-1120) Make modes of public ssl directories explicit

Previously, the mode of the `certs`, `public_keys`, and
`certificate_requests` directories within the `ssl` directory was
unspecified. This means the actual mode depended on the umask of the
user that started puppet, and caused those directories to be created.

Since the information in these directories is intended to be public,
there is no harm in making the mode explicit 0755. This also matches
what I see when installing puppet from packages.
(PUP-1120) Be explicit about group for ssl directory

Previously, files and directories contained with the `ssl` directory
were inconsistent with respect to their `group`. For example, the
`certs` directory had group `root`, but files within it,
e.g. hostname.pem, had group `service`.

Commit c6846c2b updated the `hostprivkey` and `privatekeydir` settings
so that they are readable by the `service` group. This commit makes
the `service` group explicit for other files & directories in the
`ssl` directory.
(PUP-1120) Remove group write permission for ca settings

Previously, the `service` group was granted write permission for ca
related files, but that is not necessary and likely left over from a
time when puppet did not manage the group correctly for file settings.

This commit removes group write permission for ca settings.
(PUP-1670) Add validate_cmd parameter to file type

If this parameter is set, then this file will only be written if
the command specified returns 0.

Also adds a validate_replacement parameter to allow specifying some
other string to use for specifying temporary file name instead of the
default of '%'.
(PUP-713) cron: forbid the mixing of special and numeric schedules

The BSD special schedules such as @reboot or @midnight and regular schedules
comprising one or more time fields such as minute or hour are mutually
exclusive. Until now it was valid to specify a special schedule alongside
numeric fields, though.

Add validation logic to the crontype to ensure that a cron resource does not
try to manage these incompatible fields together. It is acceptable to
declare should-values for the respective properties, but only with the
following limitation:

If the 'special' property is declard but not :absent,
any declared numeric schedule field must be :absent.

Raise an ArgumentError type exception that includes a concrete reference
to the special property as well as the title of the offensive numeric
schedule property.
(PUP-713) Add tests for the special property of the cron type
Merge branch 'issue/master/pup-713-disambiguate-cron-schedules'

* issue/master/pup-713-disambiguate-cron-schedules:
  (PUP-713) Add tests for the special property of the cron type
  (PUP-713) cron: forbid the mixing of special and numeric schedules
(PUP-1451) (PUP-1120) Merge branch 'relaxed_permissions'
(PUP-1588) Constrain new msgpack specs to only run with msgpack lib

When msgpack lib is not present (extra group gems not installed), they
will be ignored.
Merge branch 'issue/master/pup-1588-constrain-new-msgpack-tests'

* issue/master/pup-1588-constrain-new-msgpack-tests:
  (PUP-1588) Constrain new msgpack specs to only run with msgpack lib
(PUP-648) Implement upgradeable and versionable on the pkgin package provider

Implemented the upgradeable and versionable features on the pkgin package provider so
that packages can use `latest` and version numbers in the ensure property.
Merge branch 'pr/2023'

* pr/2023:
  (PUP-648) Implement upgradeable and versionable on the pkgin package provider

This closes GH-2023
(PUP-1619) Fix typo in Tuple instance_of logic
Merge pull request #2333 from zaphod42/doc/master/update-developer-intro-docs

(doc) Split up README_DEVELOPER
(maint) Add missing noun that was accidentally
Merge branch 'maint/master/rspec-tutorial-docfix'
Merge pull request #2347 from dalen/file_validate_cmd

(PUP-1670) Add validate_cmd parameter to file type
PUP-1681 Stat doesn't expose correct mode on Win

 - An issue was discovered where the values returned from
   Puppet::FileSystem.stat and Puppet::Util::Windows::Security.get_mode
   were not aligning as they should.  The call to get_mode returns
   a mode value that should more correctly express a simulated POSIX
   mode on Windows
 - The stat instance returned from Ruby has been further monkey-patched
   on Windows to add an appropriate mode value using the existing
   lower-level code that reads a files security descriptor.
 - Some tests that were performing special handling of mode values were
   updated now that mode should be more consistent across platforms.
 - In some cases, an existing call to File.chmod was changed to call
   set_mode under Windows.  In the future, our FileSystem abstraction
   should be modified to create an OS-agnostic single point of entry
   for setting mode on files.
Merge remote-tracking branch 'upstream/pr/2350'

* upstream/pr/2350:
  PUP-1681 Stat doesn't expose correct mode on Win

Closes GH-2350