CodePointInfo Name Cleanup

Changed the names of the some of the members of the CodePointInfo class to make them more wieldy.
String Trim Fix

Previously the trim_front and trim_rear private methods of the String class acquired the String's locale internally whenever it was needed.

This presents two problems:

1. A call will be made to Locale::Get for each and every code point, which is potentially expensive
2. Each call to Locale::Get performs an atomic read, which means any atomic read for every code point, which is potentially expensive

And a third if and only if the string is using the default locale (i.e. locale==nullptr):

3. If another thread sets the default locale while another string is trimming, the locale used to trim different parts of the same string may be different, as the locale returned by Locale::Get may differ between calls

Accordingly, trim_front and trim_rear now take a const Locale & as a parameter, and the locale is acquired for them by the Trim method.
String Cleanup

Cleaned up/broke out some messy code in the String class.

std::vector is not specified to have T * as its iterator type, accordingly it is necessary to transform those iterators into pointers to work with interfaces that expect pointers.  This transformation code is messy/hacky/verbose/unreadable, and accordingly is now broken out into separate methods.
Normalizer

Added the Normalizer class, which transforms strings of Unicode code points into various normal forms.

Currently only supports NFD (i.e. Normal Form, Canonical Decomposition).
String::Normalize

Added methods to the String class to support Unicode normalization.