Normalize Overloads

Added overloads for String::Normalized based on the rvalue-ness of this.
Trim Overloads

Added overloads to String::Trim based on the rvalue-ness of this.
IsNormalized

Added an IsNormalized method to the String class, which determines whether the string is in a certain normal form.
std::hash<String>

Implemented a specialization of std::hash for String.

Uses djb2.
UTF32

Started implementing UTF-32.
Trim Tweak

Tweaked the String::trim_front method to use std::vector<CodePoint>::erase rather than std::memmove and std::vector<CodePoint>::resize.

This is code is simpler, more inline with good/accepted C++ style, and clearer/more readable.
Unicode Data Parser

Wrote library classes for parsing the file format (plain text, semicolon-delimited) in which the Unicode Character Database is distributed.
Item Fix

Fixed a bug in the way the Item class was converting strings to integers.
Item Fix

Fixed a bug that caused getting ranges from an Item to always fail for valid entries.
Unicode Data Parser Refactor/Improvements

Refactored the Unicode data parser utilities, making some improvements to the interface:

- std::string is used in place of C-style strings
- CodePoint::Type is used instead of std::uint32_t
Condition Rename

Renamed the class that contains information about conditions from the Unicode data files to ConditionInfo.

Going forward there will need to be a class which encapsulates the actual functionality of such conditions (i.e. checks to see if they hold in a given context), and the name "Condition" suits that role much better.

Also tweaked the documentation for ConditionInfo slightly.
Condition

Implemented the Condition class, which wraps a function pointer -- implementing the condition -- and a boolean value -- indicating whether the sense of the condition is inverted.

This is used within Unicode to make case mappings -- among other things -- conditional on certain languages/contexts.
FileIterator

Added the FileIterator class, which iterates the Lines in a File.
Ignore Unicode Character Database

Starting work on a parser to generate C++ source code from the Unicode Character Database (UCD), accordingly the UCD is now present in the root project directory, and must be ignored.
ArrayAggregator

Started work on the UCD parser.

As the UCD contains many data types that logically map to arrays, and since the UCD parser will output C++ code defining constants, it makes sense to aggregate all the arrays into one master array, and just assign specific subarrays as pointers where needed.  This is especially true given C++'s syntax/limitations around compile-time arrays (unless you want to incur heap allocations at program startup).

The ArrayAggregator class template provides this functionality.  Arbitrary subarrays may be created and added to, accessing them by a "key".  Once the consumer is finished adding to the array, the array can be accessed either by retrieving finalized details about a certain subarray (i.e. the offset into the master array at which it begins, and its size), or by iterating over each element in sequence.  Performing any such read access switches the ArrayAggregator into immutable (called "resolved") mode, which prevents any further additions/modifications, insuring the validity of all generated offsets.
Casing Parser

Added a parser for SpecialCasing.txt and CaseFolding.txt.