Crash dumps are no longer empty on 64 bit (#18868)
### Summary of the issue:
On 64 bit, if NVDA crashed, a 0 byte nvda_crash.dmp would be created
with no actual crash dump information, as MiniDumpWriteDump fails.
### Description of user facing changes:
A valid crash dump is now produced if NVDA crashes.
### Description of developer facing changes:
None
### Description of development approach:
Move creation of nvda_crash.dmp and filling it in with MiniDumpWriteDump
into its own c++ utility function in nvdahelper.localLib, and call this
from the UnhandledExceptionFilter in watchdog.py.
### Testing strategy:
Crashed NVDA by running the following in the Python console:
```
import ctypes
ctypes.windll.kernel32.DebugBreak()
```
Verified that an nvda_crash.dmp was created and that it could be opened
in winDBG and exception information was viewable.
Also confirmed that nvda.log still contained the listing of all Python
stacks.
### Known issues with pull request:
Although we already added what seemed to be correct definitions for
MiniDumpWriteDump and related structures to winBindings.dbghelp,
MiniDumpWriteDump still failed on 64 bit from Python with a memory
access error.
Moving this code to c++ solves the issue, but It is not quite understood
exactly why.
Perhaps the native handle for the file from msvcrt.get_osfhandle is not
correctly 64 bit?