Allow passing extra options to the execute

In order to allow the macports execution to have the normally not
allowed HOME environment variable the Provider.commands() method has
been extended to allow specifying the options to pass through to the
execute call
Added doc of the command parameter
Simple complete command wrapper for providers

Will be used for keeping track of commands registered in providers.
Puppet::Provider constructs Command objects

Delegation to a command object to handle executing a command.
Deprecated make_command_methods

This is a private method that should not be exposed.
Delegate all commands to Puppet::Provider::Command

Command execution for providers is now all coerced into
Puppet::Provider::Command.
Documented commands
Unit test for Puppet::Provider dsl
Added unit tests for Provider command DSL

Testing the command method creation, invocation of the command and
effect on the suitability of the provider.
Added tests around suitability of provider
Moved Puppet::Provider::Command

It had been created in the wrong place. Moving to the right location
Allow definition of commands via a dsl

Allows definition of single commands and specifying more specific things
about how they should be executed (such as environment variables to have
set)
Cleanup of internals

Moved around parameters to Puppet::Provider::Command and cleaned up the
interface to the CommandDefiner sub-language of the Puppet::Provider so
that using it is a little simpler to read.
Deprecation points to has_command for substitute
(#13435) Change default signing digest algorithm

Change the default digest algorithm away from MD5

This commit is one step along the way to FIPS 140-2 compliance (#8120).
In a FIPS 140-2 environment, MD5 is not available. Older versions of
Ruby (1.8.7, 1.9.2) will SIGABRT when trying to use MD5 because they
don't properly check the return code from openssl.

Because the fingerprints between agent and master aren't
machine-verified and `puppet cert list --digest <digest>` supports any
of the digests, this commit is backwards and forwards compatibile.

Later portions of #8120 will make the default digest algorithm
configurable.
Tests for deprecation warnings for dynamic scoping

The tests for dynamic scoping were non existent and thus dynamic scoping
was implemented incorrectly. This allows us to check for correct
warnings.
Implement newlookupvar() to replace dynamic scope

lookupvar() is shifted to oldlookupvar() and newlookupvar() is added. An
intermediary lookupvar() function will query both and if the answer
varies then it will throw a deprecation warning for dynamic scoping. The
intermediary and old lookup functions may be removed at a later date,
thus completing the transition.

A test case has been introduced to detect dynamic scoping and the
deprecation warning. Slight modifications to the spec test scoping
objects were made to bring them more in line with the real world.

All scope tests pass. When oldlookupvar is replaced, the deprecated
dynamic scoping test case will fail and all other scope test cases will
pass.
Remove dynamic option for lookupvar

The :dynamic option for lookupvar() was added in an attempt to track
dynamic vs non-dynamic scoping in a single pass. This is no longer used.
Add tests for mixed inheritence/inclusion

The preexisting tests didn't fully test the various forms of inheritence
and inclusion. This commit adds tests for finding variable values
through:
class local scope
class inheritence scope
class inclusion scope (with deprecation warning)
class inheritence+inclusion scope (finding through inheritence)
node scope
top scope
Make new scoping look through inherited scopes

Previous to this commit, Puppet would look through a given scope
hierarchy and give deprecation warnings when a value was found in either
an inherited class scope or included class scope, when it should only
give the warning in the case of the included class scope.

This commit makes the new-scope behavior also examine inherited scopes,
though continuing to ignore included scopes.