(#17710) Refactor the IP module

:+1: This pull-request is ready for merging.

This pull request aims to refactor the `Facter::Util::IP` module with kernel specific classes adhering to a common interface. This pull request eliminates `case` statements and crazy kernel conditionals within methods. Additionally, this eliminates the giant `REGEX_MAP` constant at the top of the `Facter::Util::IP` module and adds some documentation to methods that were previously left undocumented.

The related ticket is here: http://projects.puppetlabs.com/issues/17710