(PUP-2613) Comprehensively test all yumrepo params
(PUP-2150) allow yumrepo params to be set absent

Commit 7b8650e introduced proper validation for yumrepo properties that
should be URLs, but didn't allow those properties to be set absent. This
commit remedies that limitation.
(PUP-2162) support yumrepo baseurl/gpgkey multiple values

The yumrepo gpgkey and baseurl parameters can accept a list of URLs, so
to validate them we need to split the field on whitespace and validate
each value in that list.
(maint) Don't strip whitespace from yumrepo keys

Yumrepo values may have leading or trailing whitespace, and stripping
this can cause resources to flap. Since it's not strictly necessary and
the yumrepo code in 3.4.3 didn't handle this, we can omit this for now.
(PUP-2179) Add test coverage for IniConfig::Section
(PUP-2179) Extract standalone INI file class

The existing Puppet::util::IniConfig::File class is responsible for both
managing a collection of files as well as parsing, formatting, and
storing those files. This overloads the responsibility of this class and
makes it hard to make behavior changes.

This commit extracts a class that represents a single file. Since the
'File' constant is already used this is named 'PhysicalFile' in contrast
to the logical nature of the existing File class. This commit only
extracts the parsing and later commits will add more behavior.
(PUP-2179) Implement INI single file formatting
(PUP-2179) implement storing for single INI files
(PUP-2179) Implement simple INI file collection

This commit reimplements the Puppet::Util::IniConfig::File interface on
top of PhysicalFile objects. This makes for a much simpler and cleaner
implemenatation that we can swap out the implementation of the File
class.
(PUP-2179) Replace Puppet::Util::IniConfig::File

The old Puppet::Util::IniConfig::File class was messy, complex, and had
no test coverage; this commit removes that class and aliases the
FileCollection class to the File constant.
(PUP-2181) Delete ini file entries on absent property
(PUP-2178) Map INI name to yumrepo descr

The yumrepo type uses 'name' as the namevar, while yum configuration
uses 'name' as the repository description. Because of this mismatch the
yumrepo type has a descr field that we need to explicitly map to the
'name' INI property. This commit adds the necessary mapping of that
field.
(maint) Yumrepo boolean values are case insensitive.

When handling boolean values for yum repos, a given value is downcased
before it is checked:

    # yum/config.py
    def parse(self, s):
        """Parse a string containing a boolean value.  1, yes, and
        true will evaluate to True; and 0, no, and false will evaluate
        to False.  Case is ignored.

        :param s: the string containing the boolean value
        :return: the boolean value contained in *s*
        :raises: :class:`ValueError` if there is an error in parsing
           the boolean value
        """
        s = s.lower()
        if s in ('0', 'no', 'false'):
            return False
        elif s in ('1', 'yes', 'true'):
            return True
        else:
            raise ValueError('invalid boolean value')

When validating these parameters we should perform a case insensitive
match to match the yum behavior.
(maint) Raise error when parsing duplicate INI section
Merge pull request #2520 from adrienthebo/bugfix/stable/pup-2163-yumrepo-fixes

PUP-2163 Smite yumrepo and inifile with the mighty sword of refactoring