(CFACT-91) Implement external facts on Windows

Add Windows external facts and execution infrastructure supporting it. Also ends up filling in Ruby custom fact support.
Since we're using a single thread to read both stdout and stderr, this can deadlock. For example, if the child process writes to stderr exceeding the pipe buffer, then the child will block in a write. But if we block indefinitely reading from stdout here, then we never reach https://github.com/puppetlabs/cfacter/pull/151/files#diff-76ddb8f825cb53c397f15ba7d7e10590R351, so deadlock will occur.