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

This also removes the untested network.rb fact and moves in into interfaces.rb
since they are dynamically generated by the name of the interfaces. They now
have tests.

This supports the new on_flush method.

The related ticket is here: http://projects.puppetlabs.com/issues/17710
Merge pull request #423 from razic/fix/2.x/17710_ipmodule_refactor

(#17710) Refactor the IP module

Also reviewed by:

Adrien Thebo <adrien@puppetlabs.com>
Andy Parker <andy@puppetlabs.com>
Revert "Revert "(maint) Replace rspec >= 2.11 expect(foo).to with foo.should""

This reverts commit b4097871e84d7a7b3441130289c594aee859af74.
Merge branch 'maint-rspec_2.9_expectations'

This ensures that GH-423 uses 2.9 expectations since jenkins.puppetlabs.com
uses that version of rspec for testing.