Fix unicode tables

This switches the unicode tables in core to use static character-range tables and a binary search helper rather than open-coded switch statements. It adds about 50k of read only data to the libcore binary but cuts out a number of huge functions that were expensive to compile.