(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-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.)
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.
(packaging) Update PUPPETVERSION to 3.5.0-rc3
(maint) Add travis notifications to #puppet-dev
Merge pull request #2488 from kylog/maint/travis-irc-notification

(maint) Add travis notifications to #puppet-dev
Merge pull request #2483 from nfagerlund/docs_fileserver_example

Maint: Fix buggy auth.conf example in fileserver.conf
(maint) Change travis irc notifications format to omit build number
Merge pull request #2496 from kylog/maint/tweak-travis-irc-notifications

(maint) Change travis irc notifications format to omit build number
(maint) Reduce travis notifications to a one-liner

This version drops the repo owner (all ours are puppetlabs so
no info there), the sha (do we care?), the author (there can be
several), and the change url, and collapses the build url onto
that one line.

It's an attempt at improving the s/n ratio of these notifications
to see if they're worth sticking with.
(maint) Update PMT tests to match a regex

Commit 8547e2f updated three PMT tests which were matching the exact
output of PMT commands to take into account new deprecation warnings.
However the trace in the deprecation warning may vary depending on
puppet installation.  Rather than continue to adjust the output matches
to be exact comparisons, this commit changes them to match against
regex expressions so we can skip the deprecation warnings.
(packaging) Update PUPPETVERSION to 3.5.0
(maint) Turn off inclusion of EPEL repo in acceptance runs

Our acceptance suite no longer needs the EPEL repository enabled.
Disables the beaker flag that was causing EPEL to be loaded on rhel
hosts under test.
Merge branch 'stable'

* stable:
  (maint) Turn off inclusion of EPEL repo in acceptance runs
  (packaging) Update PUPPETVERSION to 3.5.0
  (packaging) Update PUPPETVERSION to 3.5.0-rc3
Merge pull request #2497 from kylog/maint/tweak-travis-notifications-part-deux

(maint) Reduce travis notifications to a one-liner
(PUP-772) Add the install_option attribute to the apt provider

Since the package provider install_option attribute exists I, have
added it to the apt provider. With this (4 line) patch the apt provider
becomes much more flexible and it will prevent 'hacks' and work
arounds in Puppet code for Debian machines.

Example use case:
When you use Percona SQL instead of MySQL it becomes hard to not
overwite the percona packages with the regular MySQL packages.

The problem:
  sudo apt-get install percona-server-server-5.5
  sudo apt-get install zabbix-server-mysql

The thing which is gonna happen now is that the zabbix-server-mysql
will replace percona-server-server-5.5 with mysql-server because
it is in the recommends of the zabbix-server-mysql package.

The solution:
  sudo apt-get install percona-server-server-5.5
  sudo apt-get --no-install-recommends install zabbix-server-mysql

Unfortunately specifying this option is not possible in Puppet.
With this patch it does, and it solves way more issues you can
have with apt and Puppet, for example feature request: #2406.

Example Puppet code:

  package { 'zabbix-server-mysql':
    ensure          => present,
    install_options => '--no-install-recommends';
  }

  package { 'zabbix-server-mysql':
    ensure          => present,
    install_options => ['--no-install-recommends', '--install-suggests'];
  }