Add package providers and version lookup

This commits adds modified version of the
Puppet Package type. It includes code that
looks for package version in /etc/versions.yaml
file if the package is going to be installed instead
of just installing the first available version.

This lookup will be initiated only is you
pass :installed or :present to the package's
ensure property. Passing :latest, :absent
or explicit version string will cause
the default behaviour.

Lookups will be performed only for apt and
yum providers.

Yum and Apt providers in this patch are
hacked to support transactional rollbacks.
When the provider is updating the package from
one version to another it saves the diff of
packages to a file and if it’s ever asked to
install the previous version again the provider
takes the diff file and installs the previous
package versions and their dependencies.

Change-Id: I84e4b7540f9e72ceb2e1dee0762184d3e2b4356c
Implements: blueprint patch-openstack
Merge "Add package providers and version lookup"