mpm_winnt: Simplify the shutdown code that was waiting for multiple worker thread handles in batches.
Starting from r1801636, there is no difference between ending the wait with one or multiple remaining threads. This is because we terminate the process if at least one thread is still active when we hit a timeout.
Therefore, instead of making an effort to evenly distribute and batch the handles with WaitForMultipleObjects(), we could just start from one end, and wait for one thread handle at a time.
mpm_winnt: Avoid using TerminateThread() in case the shutdown routine hits a timeout while waiting for the worker threads to exit.
Using TerminateThread() can have dangerous consequences such as deadlocks — say, if the the thread is terminated while holding a lock or a heap lock in the middle of HeapAlloc(), as these locks would not be released. Or it can corrupt the application state and cause a crash.