(#15852) Allow rc in Puppet and Facter version strings

Previously putting rc in the Puppet version string would fail, mainly because
of a test that verified that the version only contained 3 dot separated
integers. This commit updates the Facter dependency to correctly use 2.0.0-rc
as the minimum version, as 2.0.0-rc is less than the previously required 2.0.0
as specified by SemVer. It also removes the test that verified the Puppet
version was a 'valid' 3 dotted integer version. That test is redundant, as the
test that follows verifies that the version string is valid SemVer.
(#11870) Ignore uninstall keys that don't exist

Previously, we assumed the 4 combinations of (HKLM or HKCU) and (32 or
64) registry paths always existed. When running puppet in an interactive
logon session, this assumption appears to hold. However, when puppet
runs as a service (under LocalSystem), the assumption fails as the
registry key `Software\Microsoft\Windows\CurrentVersion\Uninstall`
typically does not exist within the HKEY_CURRENT_USER hive. In that
case, we would fail to enumerate the set of installed products.

This commit changes the enumeration code to ignore errors that occur
when the Uninstall key for a particular combination does not exist. This
corresponds the Windows error code ERROR_FILE_NOT_FOUND[1]

However, if an exception occurs for other reasons, e.g.
ERROR_ACCESS_DENIED, then we re-raise the exception and fail.

Also, the inner `open` call should never fail with ERROR_FILE_NOT_FOUND
because we get a list of subkeys for the Uninstall key, and then open each
subkey in turn.

[1] http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
Merge branch 'ticket/3.x/11870-skip-absent-keys' into 3.x

* ticket/3.x/11870-skip-absent-keys:
  (#11870) Ignore uninstall keys that don't exist
Fix missing forge stub and directory check due to test change in 3.x branch rollup

This fixes a test error that was being thrown by the
modules/install/nonexistent_directory.rb file.

In recent commits we added a more clever way to stub the forge host in 2.7.x,
and obtain a forge hostname. This test however went from being a non-network
capable test to a networked one in 3.x, so the rollup from 2.7.x->3.x meant our
changes weren't applied to this particular case. This patch fixes that by
adding the correct stubbing method 'stub_forge_on' to the top of the file.

It also corrects a negated directory check which creaped in during merge up and
ensures proper cleanup using the new teardown mechanism (like the other tests).
Merge branch 'kbarber-ticket/3.x/pmt_missing_stub_on_test_nonexistent_dir' into 3.x

* kbarber-ticket/3.x/pmt_missing_stub_on_test_nonexistent_dir:
  Fix missing forge stub and directory check due to test change in 3.x branch rollup
Merge pull request #1036 from haus/ticket/3.x/15852_allow_rc_version_strings

(#15852) Allow rc in Puppet and Facter version strings
(#15852) Remove version check from puppet_spec.rb

This commit removes the version test from puppet, as it doesn't ensure any
functionality of puppet, but only that the version string matches certain
criteria.
Merge pull request #1044 from haus/ticket/3.x/15852_allow_rc_version_strings

(#15852) Remove version check from puppet_spec.rb
(#15752) Remove ca_days

Remove `ca_days` as it has been deprecated and should now be removed
for 3.0. `ca_ttl` should be used in it's place.
(#15750) Remove setting `cacrl` to false

Remove support for setting cacrl to false. Puppet will now just
ignore the CRL.
(#15758) Remove fact downcasing

Remove `downcasefact` and `downcase_if_necessary` as downcasing
of facts is no longer supported.
(#15765) Don't allow setting recursion depth with `recurse`

Remove the ability to set the recusion depth by setting the
`recurse` parameter. The `recurselimit ` parameter should now be
used instead.
(#15766) Remove 'path' as a valid parameter for the mount point

The `path` parameter has been deprecated (and now removed) for the
mount point. `name` should now be used instead.
(#15760) Require $ on variables in definitions

When listing parameters in a defined type or class definition, it was possible
to list a paramter without a $ prefix. This has been deprecated since 2006. It
is now required that every parameter begin with $.

Deprecated example:
    define vhost (port = 80, vhostdir) { ... }

Standard, now required version:
    define vhost ($port = 80, $vhostdir) { ... }
(#15765) Raise error for invalid values for recurse parameter

Since the recursion depth can no longer be set with the `recurse`
parameter (and should instead be set with the `recurselimit`
parameter), do not allow integers as valid values for the `recurse`
parameter. In addition, raise an error if the parameter is set to
an integer value.
(#15751) Remove `--apply` option

Remove the `--apply catalog` option as `puppet --apply` has been
deprecated. `puppet apply --catalog` should be used instead.
(#15753) Remove `reportserver` setting

Remove `reportserver` setting as it has been deprecated.
`report_server` should be used instead.
(#15755) Remove `set_default_format` method

Remove the `set_default_format` since it had previously been
depreciated. `render_as` should be used instead.
(#15763) Remove `mkmodelmethods` method

Remove deprecated `mkmodelmethods` method for Provider objects.
`mk_resource_methods` should be used instead.
(#15762) Remove support for Facter versions below 1.5.5

Previously, Puppet would work around the fact that Facter versions
older than 1.5.5 were missing necessary functionality. Remove
this functionality to add a hard dependency on Facter version
1.5.5 or later.