Sync changes back to upstream

Changes:

- The original __isGIF function had a few typo's, this new version is tested, and works.
- Keyboard events dont have a charCode, so added code to create charCode from keyCode
- override public vs public override, not a big deal just matching the way used in other parts of ColorMatrixFilter