Change hard coded 'keyCodeFromChar' hash to be generated

Instead of maintaining both the 'keyCharFromCode' and 'keyCodeFromChar'
hashes by hand, and trying to keep them in sync, it makes more sense
to generate one from the other.  This adds a tiny increase in processing
but cuts down the size of the library and increases maintainability.