(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.