(#17710) Refactor the IP module

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
Merge branch 'razic-fix/2.x/17710_ipmodule_refactor'

* razic-fix/2.x/17710_ipmodule_refactor:
  (#17710) Refactor the IP module

closes #406