String Update/Overhaul

Updated, overhauled, and added to the String class.

Added TrimFront and TrimRear overloads alongside Trim.

Broke the Normalize method out to ToNFD and ToNFC.

Broke the IsNormalized method out to IsNFD and IsNFC.

Added ToLower, ToUpper, and ToCaseFold overloads.

No documentation.

Added proper begin and end methods (accessing pointer type iterators to the beginning and end of the sequence of code points, respectively).

No documentation as of yet.
Comparer

Added the Comparer class, which compares Unicode or C style strings (assumed to be ASCII or Latin-1) for canonical equivalence.

Supports case insensitive comparisons (using full or simple case foldings) and skipping the pre-comparison normalization step.

Also added a constructor to the CodePoint class which takes a char.
String Comparison

Added methods to the String class to test for canonical equivalence with other strings (including C strings).

Also added non-member operator == and operator != overloads.

The Equals member method accepts an optional boolean value which allows for case insensitive comparisons.
String Constructor Consistency Changes

That String constructors took a pointer to a const Locale rather than a reference was convenient from an implementation point-of-view, but inconsistent with the manner in which the rest of the library passes Locale objects around, so this was changed, necessitating two more constructor overloads.
Condition Fix

A bug in Condition::operator () was causing all conditions to be treated as Final_Sigma.

In Condition::operator () there's a loop over a static const array which contains std::pair objects mapping strings (from the UCD) to function pointers to the implementations of those conditions.  This loop is supposed to continue until a match with the string Condition objects store internally is found, at which point the corresponding function pointer will be invoked.  However the string matching check was erroneously omitted, so this loop unconditionally executed the function pointer corresponding to the first element in the mapping array, which happened to be that of Final_Sigma.
Parser Fix

Fixed a bug in the UCD parser's handling of CaseFolding.txt which was causing case folding mappings for Turkic languages (i.e. "tr" or "az") to be conditional on a contradiction -- i.e. "tr" and "az" (impossible) rather than "tr" or "az".