On Windows we treat evt.HardwareKeycode == 0 as a special case now, where we assume
that evt.KeyValue is the actual printable character we want and doesn't need to be
translated.  This happens because of the way dead keys on Windows work, where certain
characters share the same hardware keycode.

This behavior corresponds to the patch `0009-wm_char-character-input-13.patch' in the Win32 package.
Merge pull request #411 from bratsche/win32-key-translation

Key translation