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