reduce space required by idna data tables
The `Range` type defined by uts46 takes up 20 bytes on a 32-bit platform and 32 bytes on a 64-bit platform. This bloat is due to `Mapping` using a full word-width discriminant for its type and native string slices, which are unnecessarily large. The use of native string slices in this context also require many load-time relocations on some platforms when idna is used in a static library, another unnecessary cost. Instead of this scheme, we can define our own string slice type that indexes into a generated table. This string slice type enables us to use a smaller discriminant type for `Mapping`, and therefore reduces the size of `Range` to 16 bytes on a 32-bit platform and 16 bytes on a 64-bit platform. For x86-64 Linux, this change reduces total idna size by ~130K, a significant savings. Changing the script to use unicode escapes makes things slightly more readable, enables better eyeball comparisons of the generated tables to the original mapping table, and makes syntax highlighting in emacs somewhat faster.