Improve setup robustness of Windows tests

* In PowerShell scripts:
  * Use $ErrorActionPreference = 'Stop' so we stop on any error
  * Use Exec helper that throws an error on any errorlevel
  * Try not to use -ErrorAction SilentlyContinue as often

* In Python scripts:
  * Use powershell -Command instead of -File which does not propagate
    the errorlevel properly.
  * For stop(), use subprocess.check_call() which is synchronous and
    which can check the exit code, unlike subprocess.Popen() which
    is asynchronous.
Merge pull request #550 from MalcolmEvershed/windows-setup-robustness

Improve setup robustness of Windows tests