(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.
I'm not sure if I like this better than what we were doing before.

Before we were buffering everything read until we hit a newline, then we'd copy the buffer up to the newline and process that line.  I count one amortized heap alloc for the buffer (grows when a line is read in that exceeds the size) plus one heap alloc for each line (N lines).  So ~1 + N allocs.  Additionally, we don't bother allocating any additional lines if we've hit the final line the callback is interested in (minor thing).

I don't see why making a vector of lines and then having to prepend the previous buffer is any better or less complicated code.  I count one heap alloc for the read buffer, plus M allocs of the line vectors (where M <= N), plus N allocs for the lines, plus M allocs for the first line in the vector because of the prepend (even when `output` is empty),  plus M allocs for the remaining buffer.  So 1 + 3M + N allocs.

The old code could simply be retrofitted to support \r\n with:

    if (i > 0 && buffer[i - 1] == '\r') {
        --size;
    }

And then only need the read abstracted away behind a callback, no?