Add full Unicode support for codepoints >= 0x10000

Update everything to fully support the entire range of Unicode.
- Updated many data structures to represent code points with uint instead of ushort, to properly handle SMP characters.
- Use UCS-4 encoding in several places to correctly process values that cannot be represented in one `ushort` value.
- To minimize changes cascading throughout the code, after any parts of the code that need to handle characters, I convert them back into surrogate-pair encoded `QString`s.
- I replaced some use of QChar (that cannot work for Unicode code points >= 0x10000) with the static function that has an overload for UCS-4 encoded values.
- I optimized the duplicate elimination code by first sorting, *then* doing duplicate removal. Old algorithm was O(n^2), now using O(n) algorithm.
- I used the C++ standard algorithm `std::unique` to do the duplicate elimination.
- Duplicate removal now drops any NUL (zero) characters.
- Extended the character ranges dialog to include every range in the latest Unicode standard.

Tested working on [DejaVu Fonts](http://sourceforge.net/projects/dejavu/?source=dlp) .ttf files, which contains a huge number of characters with code points >= 0x10000.