Provide string conversions for various enums

This lets WindowEventId, KeyCode, and ScanCode use the derived Show trait.
The extra data provided for KeyCode and ScanCode is trivial to obtain,
given that ToPrimitive is implemented for both, while WindowEventId has no
specific data, thus any custom implementation is unwarranted.

Event cannot use the derived Show trait without many of the sub types
providing an implementation as well. Provided is now a simple relation of
Event type to its identifier as a string.