(PUP-1976) Use metadata.json as canonical metadata source.

Prior to this commit, the Modulefile was used as the primary source of user-facing metadata for modules.  This file was executable Ruby, which was intended to describe a simple data structure.  This causes a few problems for us in the long-term, including making automated module builds a significantly more difficult proposition, and making changes to acceptable metadata a slow process (requiring new releases of Puppet).  In addition, the only piece of Puppet code that interacted directly with the Module file was the `module build` action – anywhere we actually need to know something about the module, we look it up from the metadata.json file.

This commit removes this level of indirection between user input and module data, making the metadata.json file a first-class citizen in Puppet modules.  It similarly deprecates the Modulefile as a supported source of module data.  Checksums have also been moved into their own file (per PE-3124), and `puppet module changes` has been updated to leverage the new file when available (per PE-3120).

For users building a module containing only a Modulefile, this will issue a warning that the Modulefile is deprecated, and output the corresponding metadata.json file.

For users building a module containing both a Modulefile and a metadata.json file, this will issue a warning that the Modulefile is deprecated and is being ignored.
(PUP-1977) Update `puppet module generate` to create `metadata.json`

Prior to this commit, running `puppet module generate` would create a Modulefile with the appropriate metadata, from which a metadata.json file would be generated when you ran `puppet module build`.  Since we're migrating away from the Modulefile as the canonical source of metadata (as per PE-3117), this commit will instead generate an equivalent metadata.json file when the module is created.
(PUP-1932) Restrict systemd provider to manage file-based services

Prior to this commit, the systemd provider returned in-memory services.
This had a couple odd consequences, e.g. with 'puppet resource service':
1) short-lived services would come and go, though they are not actually
   managed directly
2) disabled and stopped services wouldn't be reported at all

This commit changes the systemd provider to return file-backed
services.
(PUP-1433) Add example environment to deb packages

This adds an /etc/puppet/environments/example_env directory,
subdirectories, and a README about the environment. We can't remove the
existing /etc/puppet/manifests directory because it would destroy a
large number of deployments (anyone with automation depending on that
directory being created). We also can't create a production environment
because it would then shadow the /etc/puppet/manifests directory and
also end up breaking automation as well as any existing regular
installations. The example environment with a README seems to be the
best way to move forward and try to present the new system to users.
(PUP-1547) Undefined method for nil:NilClass when no providers found

When a puppet type has a list property and no providers are found for that type,
provider is nil and causes an "Undefined method 'property' for nil:NilClass" error.
ie. Undefined method 'groups' for nil:NilClass for the user type

Check if provider is nil before trying to access the property
Add docs badge to README
(PUP-1892) File resources do not work with fileservers that are not the current puppetmaster.

the source parameter makes the 'uri' method private; assumably for security, the actual result is that
noone can get the full URI from the source param. The end result is that when collecting the source data
the file_content class uses full_path instead, which gets magically completed to use the puppetmaster.

If your fileserver is in fact some other remote host, that data is lost. This change makes 'uri' public
and adjusts the content handler so that it properly delivers either a URI as a string, or a
full path without leading slash (which is what the previous state was.)
(PUP-1433) Create example environment for redhat

This adds the example environment for the RPM packages. See the previous
commit for an explanation about why environments are being added to
packages in this manner.

This also moves the README.environment into a shared location so that it
can be kept the same between various packaging systems.
(PUP-1433) List all created directories in deb

The previous commits relied on automatic creation of parent directories.
This explicitly calls out each directory, which brings the debs in line
with how the rpms are expressed.
Maint: Fix buggy auth.conf example in fileserver.conf

To really get this to work right, you need to include the pluralized versions of
each. I missed that the first time around.
(maint) Fix formatting of the show_diff description
(pup-2048) Add a show_diff parameter for the augeas type
(packaging) Update PUPPETVERSION to 3.5.0-rc3
(pup-2048) Implement augeas show_diff parameter
(maint) Fix typo in test name
(maint) Add a commented out Gemfile section specifying the correct augeas gem
(maint) Add travis notifications to #puppet-dev
Merge pull request #2486 from kylog/issue/pup-2048/add-show_diffs-to-augeas

(PUP 2048) add show diffs to augeas
(PUP-2100) Use AddAccessDeniedAceEx for inheritance

With Access Control Entries (ACEs) on Windows, we currently use AddAccessDeniedAce
which does not include inheritance and propagation, but AddAccessDeniedAceEx does.
We are already using AddAccessAllowedAceEx when setting access allowed ACEs and
we should use the same behavior for denied ACEs. This commit provides that ability.
Without this commit we will not be able to properly manage access denied
ACEs with inheritance to child objects.
(PUP-1433) Deprecate non-environment manifest settings

Modulepath, manifest, and config_version are now handled by the new
directory environment system. Templatedir and manifestdir are being
completely removed. This adds the appropriate deprecations so that users
are warned they are doing something that will change.