Refactor the IP module

:warning: This pull-request is not ready for merging (yet).

This pull request aims to refactor the `Facter::Util::IP` module with kernel specific classes adhering to a common interface. This pull request gets rid of `case` statements and all the crazy conditionals within methods. Additionally, this eliminates the giant `REGEX_MAP` constant at the top of the `Facter::Util::IP` module.

The related ticket is here: http://projects.puppetlabs.com/issues/17710

Although I marked this pull-request as not ready for merging, I believe it makes sense to open this now for review and discussion. Please add code comments and concerns :+1: