Key translation

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.

/cc @mkrueger