[core] improve fork() on Windows

The Windows implemention of fork(), _fork_win32(), had some code to try
to allow commands like gitk to be executed.  However, this code did not
work for multiple reasons.  The main issue is that on Windows, gitk is
actually provided by a batch file named gitk.cmd.  If the first element
in the args list passed to subprocess.Popen() is simply "gitk", the file
won't be found and the command will fail.  This could be solved by
passing shell=True to Popen(), but that is not ideal.  The fix provided
here is to implement the same path searching algorithm that the Windows
shell uses to locate an executable, taking into account the PATHEXT
environment variable, and to use the result of that search as the first
element of the args list for subprocess.Popen().

Signed-off-by: Daniel Harding <dharding@living180.net>