Support cancellation in Lua subprocess() on Windows

The first part of the PR makes it easier to wait on the cancel event by converting subprocess() to use overlapped I/O. I've never used overlapped I/O before, but it appears to work. To prevent duplication of code, like the POSIX version, it stores the data for each pipe in an array.

I'm not too happy with 25ce011. Event objects are probably a good analog for wakeup pipes on Windows, and it seemed like the simplest solution to add them directly to mp_cancel, but it resulted in pretty ifdef heavy code. Maybe callbacks as discussed on IRC would be cleaner, or there could be another way of cleaning it up.