(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-3365) Change 3x deep map of undef to only do surface map

This changes the mapping of arguments to 3x function calls to not
map undef to empty strings except at the surface level. Other mappings
are still done as they are required for frozen strings, and values
having a type that is not supported by the 3x functions.
(PUP-3258) node exec indirector: default to environment, not its name

Nodes can be classified through a local executable that prints YAML with
a node specification. This is enabled through the node_terminus=exec option.
Since PUP-2519, this setting would break `puppet apply`. Trying to apply
any manifest would lead to Puppet applying the default environment's site
manifest instead.

The reason for this is that the node terminus will include the current
environment's name in the node lookup result. This in turn makes Puppet
look up the environment per name. This is not the desired behavior, because
Application::Apply performs the lookup and further operations with a localized
environment that overrides the site manifest.

Solved by including the current environment object in the returned node object
instead of its name.
(maint) reduce repitition in Application::Apply integration spec
(PUP-3308) Remove deprecation warning about cron purge change

This commit removes deprecation warnings for the :purge attribute
of the cron resource. Previously, when 'purge' was set to true
for unmanaged cron resources, Puppet would fire off a warning
about the 'purge' option becoming more aggressive in future versions.

This update is part of the code removal effort for Puppet 4.
(PUP-2998): Make log_level settable in puppet.conf

Added a call hook to the `log_level` setting so that this setting can be
defined in `puppet.conf` in addtion to being passed as a command line flag.
(maint) Remove duplicate file handling code

The tests had their own way of creating files and directories for
testing. All of these different ways of creating files and directories
already existed in PuppetSpec::Files. This unifies them.
Merge branch 'pr/3144' into stable

* pr/3144:
  (maint) Remove duplicate file handling code
  (maint) reduce repitition in Application::Apply integration spec
  (PUP-3258) node exec indirector: default to environment, not its name

Closes GH-3144
(PUP-3363) Make transformation of unparenthesized calls handle errors

This fixes problems when a user enters commas where they are not
supposed to be. As a result, an expression will be parsed as being an
argument list for an unparenthesized function call. The transformation
logic for such calls did not take one case into account; a non call
followed by an argument list. e.g:

$a = 1,10

Which resulted in a strange AST model (a literal list with an assignment
and a 10).

This commit adds error checking and raising of an exception in the
transformation which is caught by parser_support and formatted into an
error - either about an illegal comma (when the LHS cannot possibly be
a call at all (as in the above exampel), or a more elaborate
message about that what could be a function call requires parentheses.

In order to enable positioning of the error message on the first comma
in the argumet list, the comma tokens were required in the expression
list fed to the transformer. Subsequently these tokens must be filtered
out by the transformation, and passed on in the raised exception (since
the receiver would otherwise not know which token that caused the
problem (it is nested inside the stucture it passes on to be
transformed).

Unparenthesized function calls are a very bad idea...
(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-3306) Remove deprecated Puppet::SSL::Inventory#serial method

This commit removes the deprecated `serial` method from the
Puppet::SSL::Inventory class. It is replaced by
Puppet::SSL::Inventory#serials.

This commit is part of the Puppet 4 code removal effort.
Merge pull request #3153 from whopper/pup-3306/remove_serial_method

(PUP-3306) Remove deprecated Puppet::SSL::Inventory#serial method
(PUP-3239) Refactor node environment validation

Prior to this, the compiler was responsible for testing the environment
and producing an error message.  This change pulls the validation step
into node environment, breaking the error message up so that any
component can check if an environment has setting conflicts and return a
uniform error message.  This will make it easier to add other
environment checks.

We refrained from including a more general error message handling
mechanism similar to what is currently in POPS because generalizing that
is a bigger task more suited to a broader internationalization epic.
Merge pull request #3117 from demophoon/feature/master/pup-3239-environment-validation

(PUP-3239) Stop compilation if $environment has bad manifest settings
(PUP-2350) Fixup Windows tests for removal of non-string file mode support

This commit updates several Windows-only spec tests so that they
adhere to the recent removal of support for non-string file modes.
(PUP-3351) Evaluate ENC classes in the correct order

Without this patch classes declared from an ENC are evaluated in the
wrong order.  This is a problem because classes declared without
parameters are evaluated prior to classes with parameters which causes
an Error: Duplicate declaration when the classes with parameters are
evaluated.  According to the code comments for the
`evaluate_node_classes` method, the expected behavior is that classes
with an empty set of parameters will not conflict with classes that have
declared parameters.
(PUP-3351) Test using example of problematic behavior

After talking with Reid Vandewiele, it turns out that the problematic
behavior isn't directly the order of the classes themselves. Previous
assertions that there are possible conflicts from the classes when they
were done in one order or another are incorrect. The classes, when any
have parameters, are kept by the node in a hash keyed off of the class
name, which means that there is no possibility of them creating a
duplicate resource error.

The actual usecase comes down to *how* parameterized classes vs
unparameterized classes are often used. A parameterized class can often
be simply a set of shared data that the unparameterized classes depend
on (or inherit from) parameterized classes.

This modifies the test case for the reordering change to provide an
example of the use case here.
Merge branch 'pr/3126' into stable

* pr/3126:
  (PUP-3351) Test using example of problematic behavior
  (PUP-3351) Evaluate ENC classes in the correct order

Closes GH-3126
Merge pull request #3156 from whopper/pup-2350/file-mode-test-fixup

(PUP-2350) Fixup Windows tests for removal of non-string file mode support