Non-US keyboard layouts support

This work is for non-US keyboard layout users. Will you give me feedback?

This patch is a snapshot of my sandbox I am working on. This also includes the stuff I already posted.
This snapshot gives:

- ALTGR key emulation support. noVNC will turn CTRL and ALT events into a single ALTGR event.

- Workaround for the broken behavior of key modifier's events. This patch makes a use of the attributes in every keyevent to detect modifier's keyevents lost.
  I memorized the weirdness of keyevents that I noticed here: https://github.com/takaha/noVNC/wiki/The-weirdness-of-keyevents

- keymap support.
  You can specify the keyboard layout that the vnc server handles when your keyboard is different from it and the vnc server can't remap them itself. This is useful when you use qemu as a vnc server.
  Use keymap parameter to set a keyboard type in the URL string like:
    http://conproxy:6080/vnc_auto.html?host=conproxy&port=6080&keymap=de
  The keymap must be one of "ar da de de-ch en-gb en-us es et fi fo fr fr-be fr-ca fr-ch hr hu is it ja lt lv mk nl nl-be no pl pt pt-br ru sl sv th tr."

- keyboard refresh button
  This is just a temporal function. You can send CTRL/ALT/SHIFT/ALTGR up events with the button like the ctrl-alt-del button when you have encountered something weird.

What do you think of this approach?