(CFACT 86) Fix network address

Previously, the networking resolver did not resolve the network address
correctly. This patch gets the network address from the ipaddress and the
netmask correctly.
(MAINT) ensure that reinterpret cast is used instead of c-style cast.
(CFACT 86) Ensure that we do not modify req on ioctl

Previously, ioctl modifed the request structures when it was passed it
in. This patch ensures that ioctl operates on a copy rather than the original.
Merge pull request #146 from vrthra/fix/cfact-86/solaris-networking

(CFACT-86) Solaris: fix network address
(CFACT-91) Add Windows external fact

Add external fact support and execution infrastructure.
New to Windows are batch files and Powershell scripts.
Implement get_external_fact_directories and can_resolve on Windows.
Add scoped_env class for modifying and restoring the environment, useful on Windows because it's easier than directly modifying the child environment in some cases.
Split module::execute_command into Windows and Linux variants to handle shell execution.
Fix failing unit tests on Windows, enable unit tests in AppVeyor.
Add ruby in AppVeyor for unit tests.
Add execution unit tests.
Fix util::each_line for Windows line endings.
(CFACT-91) Enable logging and environment testing on Windows

Add unit testing related to execution and update environment::get, which didn't work on Windows for variables modified in the same process.