support puppet environments

Puppet environments are usually used to manage releases of
Puppet modules by testing them against scratch nodes before
rolling them out completely.

For more information about this core puppet feature
see http://docs.puppetlabs.com/guides/environment.html

@bracki and @mlafeldt It is rebased against our puppet-server rebased against the upstream master. The one and only commit I did is https://github.com/Jimdo/packer/commit/6a9a7005af7cb741ce15334f07c31f3b3e58c314