implement optional provider custom puppet support (#6201, #6225)

if files/custom-puppet/{manifests,modules} does not exist, it will be
created and files/custom-puppet/manifests/site.pp will be populated with
a comment and necessary tag to apply in the platform.

The site.pp must exist, if it does not, then the import in the
platform/manifest/site.pp will fail.

Any puppet resources put in custom-puppet/manifests/site.pp will be
executed, and any modules placed in custom-puppet/modules will be made
available through the --modulepath parameter to puppet.

This requires the associated platform changes (#6226)