Puppet: Move shared code into components
Add build option for provider

Unfortunately it seems that `config.vm.provider` blocks are run regardless of
which provider is actually used, so certain settings are commented out
lest `vagrant up` throws errors and fails.