(PUP-3227) Address man page ownship conflicts

Prior to this commit, upgrading from puppet=2.7.23-1~deb7u3 and
puppetmaster=2.7.23-1~deb7u3 to puppet=3.7.0.29-1puppetlabs1 and
puppetmaster=3.7.0.29-1puppetlabs1 fails. I believe this problem is due
to how Debian chose to package puppet-common, which owns
`/usr/share/man/man8/puppet-master.8.gz`.

This commit adds in a `Conflicts:` to the puppetmaster and
puppetmaster-common packages to make sure that we can successfully
upgrade from these older package versions. However, if a user has
puppetmaster and puppet older than 3.3.0 installed on a machine, and
only upgrades puppetmaster, this will uninstall the puppet package from
the system.
PUP-3366 Fix issues with string/enum type assignable calculations

There were errors in the calculation of string/enum calculation.
Basically Enum == String, if String is size constrained then
Enum < String. This fixes this calculation.

There were no tests for this, they are now added.
(PUP-3244) ENC ignores missing directory environments

When using an ENC, if an environment that didn't exist was defined for a
node puppet would place the node into the production environment instead
of raising an error to alert the user that the environment that had been
requested did not exist.

This commit changes the behaviour when an environment is defined in an
ENC but does not actually exist. Instead of placing the node into the
production environment a Puppet::Environments::EnvironmentNotFound error
is raised.
(PUP-3244) Acceptance Tests for Nonexistent Environments

Added acceptance tests to test if an error is raised if an ENC specifies
a nonexistent environment for a node.
(PUP-3244) Validate Environment Before Setting

Before this commit the environment validation was happening for the Exec
terminus instead of on the node object itself. This fix should help all
node objects from having invalid environments when its environment is
set using `Puppet::Node#environment=`.
(PUP-3366) Correct comparisson of Enum > Enum[a]

Comparissons involving an unparentesized Enum were not correct
because an iteration with all? returns true if the set being
enumerated is empty.

This modifies the logic, and adds missing tests.
(PUP-1165) Perform validation on desired triggers not current

The `enabled` and `index` trigger parameters are read-only, so they will be set
in the `current` trigger, but are not allowed in the `desired` trigger.
Previously, the `translate_hash_to_trigger` method performed validation based
on whether it was passed a `current` or `desired` trigger.

This commit moves the validation logic to the `validate_trigger` method, which
is only ever called with `desired` trigger values. It also allows the `index`
and `enabled` keys to be present in a trigger. This isn't an issue because they
are ignored for the purposes of determining if two triggers are the same.

The reason for this change, is because ultimately we don't want the
`translate_hash_to_trigger` method to mutate the `current` trigger, and this
commit makes it so that the `index` and `enabled` keys can be in the
`puppet_trigger` but will be ignored.
(PUP-1165) Ignore scheduled_task trigger start_date when unspecified

Previously, if a scheduled_task resource was created in the past, and
the desired value of the resource's trigger did not specify a
`start_date`, then puppet would think the resource was out of sync,
and attempt to delete the old trigger, and add the new one. This
process would repeat once per day, leading to spurious 'triggered
changed' messages, and reports.

This commit modifies the scheduled_task provider so that if the
desired value does not specify a `start_date`, then it will
effectively be ignored when comparing the current and desired
triggers.
(maint) Remove magic behavior

Previously, the `#triggers` method on the scheduled task provider would
magically return single element or an array of multiple elements.

This commit changes the provider to always return an array, of possibly a
single element.
(PUP-3244) Add Puppet::Environment::Directories#get! method

This new function will return the directory environment or raise an
error if a directory environment does not exist. This gets rid of the
need to check if environments exist across the codebase before
continuing for the areas where we need.
Merge pull request #3158 from joshcooper/ticket/stable/PUP-1165-task-scheduler

(PUP-1165) Provide a default value for windows scheduled task trigger
(PUP-3203) Don't mutate trigger when checking for equality

Previously, when checking if the `current` and `desired` triggers were
equivalent, we were silently deleting the `index` and `enabled` values from
the `current` trigger. If we later needed to delete the `current`
trigger, we would have lost its `index`, resulting in a call to
`Win32::TaskScheduler.delete_trigger(nil)` causing the error:

    no implicit conversion from nil to integer

This commit ensure that we don't mutate the `current` or `desired` trigger.
Merge branch 'ticket/stable/PUP-3203-cant-update-trigger' into stable

* ticket/stable/PUP-3203-cant-update-trigger:
  (PUP-3203) Don't mutate trigger when checking for equality
Merge pull request #3074 from melissaanne/stable

(PUP-3227) Address man page ownship conflicts
Merge pull request #3134 from hlindberg/PUP-3366_string-enum-type-calculation

PUP-3366 Fix issues with string/enum type assignable calculations
(PUP-643) Ignore pkg's certificate expiration warning messages

When a pkg certificate is in it's last 30 days before expiration, the
pkg tools emit a warning message so you can get a new certificate for
some operations. The 'latest' method issues a 'pkg -Hn <package>' which
trips this warning message, but the message was unexpected and 'latest'
would raise, failing the catalog application.

This commit simply ignores such certificate expiration warnings.

While I was in there, I split a very compact line of code across a couple
lines and added some spaces, in the name of readability.
(PUP-643) Report a puppet warning when pkg warns
Merge pull request #3177 from kylog/issue/stable/pup-643/pkg-skip-certificate-expiration-warnings

Issue/stable/pup 643/pkg skip certificate expiration warnings
(maint) Update puppet_for_the_win for foss-3.7.x.yaml

Update puppet_for_the_win dependency so dev builds use facter 2.2.0
(maint) Modify other uses of get() to get!()

There were several uses of get() that either immediately checked for nil
and raised the UnknownEnvironmentError or assumed non-nil and continued.
This changes all of those cases to use the new get!() method and so be
explicit that they require an environment. There are a couple uses that
still don't require the environment to exist.