(#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
(maint) Avoid executing ifconfig from the specs

Without this patch the spec examples will execute /sbin/ifconfig.  This
is a problem because the test will fail on platform which do not have
ifconfig, like Windows.

This patch addresses the problem by expecting
Facter::Util::Resolution.exec is called, preventing the system command
from being executed.

The patch also re-words the example to describe the exact behavior being
tested.
(maint) Fix Facter::Util::IP.exec_ifconfig examples

Without this patch the Facter::Util::IP.exec_ifconfig examples only set
stub methods, they don't actually set expectations that ifconfig is
executed as the examples describe.

This patch addresses the problem by updating the examples to reflect the
intent of the behavior expressed in the description of the example.
(maint) Silence no facts loaded warning in specs

Without this patch the mocked fact value in some of the tests are
producing a warning that no facts are loaded.  This is a problem because
the warning is a red herring side effect of the mocking itself.

This patch addresses the problem by stubbing the Facter.warnonce method
for these specific examples that have no facts loaded at the time of
setting the expectation.
(maint) Remove focus tag from ec2 specs

This was a stray artifact from my debugging that shouldn't have been
committed, but was by accident.
Merge branch 'razic-fix/2.x/17710_ipmodule_refactor'

* razic-fix/2.x/17710_ipmodule_refactor:
  (maint) Remove focus tag from ec2 specs
  (maint) Silence no facts loaded warning in specs
  (maint) Fix Facter::Util::IP.exec_ifconfig examples
  (maint) Avoid executing ifconfig from the specs
  (#17710) Refactor the IP module
(maint) Replace rspec >= 2.11 expect(foo).to with foo.should

Without this patch the specs are failing in our CI system because we
have rspec 2.9 installed and the change set in c028d61 introduced a lot
of examples that use the `expect().to` syntax added in rspec-2.11.

This patch addresses the problem by replacing all instances of
`expect(foo).to` with `foo.should`.