Add config util module

This commit adds a config util module. This module is meant to help do
something that the current Vagrant plugin config implimentation does not
do. In this commit, the module only contains one method to merge config
classes.
Use merged config in the provisioner

Without this commit, there is no simple way to chose values from
global/local scope for use in the provisioner class. This is currently
manifesting as an inability to specify global values and then use locals
to override them.

This commit makes use of the new merge functionality in the
PEBuild::Util::Config module. This commit merges the values from the two
configurations and then uses the resulting object in the provisioner. It
also passes the configuration to the "download" and "unpackage" actions
since they hjave no access to global configurations.
Make global and provisioner configs work together

Without this commit, the configuration classes do not work together
coherently. The provisioner configuration inherits the global
configuration and along the way calls many of the parent class
methods. The validate method in particular is returns a hash that is hard
coded to the class its originating from. While the provisioner class
should fall back on the parent class for validation of inherited variables,
the resulting error messages need to be provided in the context of the
provisioner connfiguration. Also, the provisioner does not currently
validate that it has a value for the "version" variable in the event one
is not set globally. This should be a failure.

This commit adds a validation for missing "version" value on both global
and provisioner configurations. This commit also takes any errors
originating from the parent class and adds puts them in context of the
provisioner configuration before passing them along.
Don't use parent "finalize" in provisioner config

Without this commit the parent finalize method is called from the
PEBuild::Config::PEBootstrap class. This causes the
PEBuild::Config::PEBootstrap class to establish defaults for the
variables inherited from the global class. When this happens, merging is
not effective. In this case it is more functional to not have any
defaults for the inherited values and assume they will be merged in. Any
values that do not have at least a default in PEBuild::Config::Global
should have validation performed.

This commit removes the call to the parent finalize method in
PEBuild::Config::PEBootstrap.
Pass through data to actions based on config merge

Without this commit, the actions are trying to retrieve data for their
operation from the global and local provisioner configurations. This
does not work like it once did as the "action environment" no longer
includes the configuration of the provisioner that invoked it. This
means the current way of finding information is functionally broken.
Also, the provisioner itself is merging the configurations to properly
resolve the values needed.

This commit changes the actions to no longer attempt to resolve values
from the global and local configurations. It now expects the provisioner
from which it was invoked to pass the necessary data via the "action
environment" hash. This method takes advantage that the provisioner is
now the only place responsible for resolving values from configurations.

This commit also comes with the added bonus that the configuration
classes and the actions are now somewhat more de-coupled.