Make global config version optional

Without this commit, the global "version" setting needs to always be set even if
it is explicitly set in every pe_bootstrap provisioner instance. This
also means that the provisioner level config that inherits the global
will fail if a global is set and no provisioner level config is specified.
If there is a global value, reasonably the provisioner should be able to
omit it.

This commit removes the failure when "version" is unset. It leaves the
responsibility of verifying a global "version" is present with the
provisioner configuration that needs it.
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.