Documentation

Added documentation to four methods of the Encoding class.
ByteOrderMark

Added the ByteOrderMark class to the encoding.hpp header, which encapsulates and abstracts the idea of a Unicode byte order mark (i.e. BOM).
OutputBOM

The Encoding abstract class now has a property to control whether or not the underlying implementation will output BOMs when encoding.
Encoding Tweaks

Added more overloads of the CanRepresent method.

Removed the Count overload for Graphemes, as the implementation thereof has obstactles (handling errors) I haven't decided how to work around.
ByteEncoding

Added the ByteEncoding abstract class, which will serve as the base for all encodings with a code unit size of 1 (i.e. which don't have endianness concerns).

This class provides the IgnoreBOM property, which controls the encoder's behaviour when it encounters a byte order mark in a byte stream.

The UTF8 class now extends this class, rather than extending Encoding directly.
UTF8 BOM Support

Added BOM support to the UTF8 class.
EndianEncoding

Added the EndianEncoding class, which will serve as a base for all encodings with a code unit size greater than 1 (i.e. which have endianness concerns).
Style Fix

Removed spurious return type specifications from two lambdas in string.cpp.

Earlier in development these lambdas consisted of more than just a return statement, therefore I gave them return type specifications to strictly conform to C++11 (GCC has return type deduction for lambdas consisting of more than just a return statement as an extension).  When they were reduced to a single return statement, the specifications were not correctly removed.
Count => Size

Changed the name of the Count method of the ByteOrderMark class to "Size".
Compositions

Added a Compositions class and updated the compositions.cpp file to reflect this.
GraphemeClusterBreak Name Clean Up

Renamed the GraphemeClusterBreak enumeration to "GraphemeCluster".

Renamed the Regional_Indicator member of the GraphemeCluster enumeration to "RegionalIndicator" so its naming was consistent with the naming of everything else.

Updated the data.cpp file as appropriate.
Grapheme Fix

The Grapheme class has three use cases:

1. A thin wrapper around a pointer into a string (i.e. Mode::NonOwning)
2. An owner of multiple code points (i.e. Mode::Owning)
3. An owner of a single code point, which can reside directly inside the Grapheme, eliminating the need for a heap operation (i.e. Mode::Single)

Previously the anonymous union in the Grapheme class only contained a CodePoint and a CodePoint *, which didn't reflect the reality of Mode::NonOwning.  Accordingly the union has been updated to also contain a const CodePoint *, and the code dealing with copying/moving Graphemes has been updated to match.

Also removed the mutable begin and end overloads, as it would be possible for a CodePoint * iterator to be returned from a non-owning Grapheme, resulting in undefined/unintended behaviour.
Locale Support

Added support for varying/differing locales to the CodePoint class, by way of the new Locale class.

Rather than the CodePoint class managing Unicode data structures internally, the Locale class encapsulates these structures, and stores/creates a default locale (which encapsulates the information the CodePoint class used to manage internally).  Methods which require Unicode data can then either pull from a specific locale, or fall back to the default locale.
String::Trim Fix

Fixed various bugs with the String::Trim method.
String Locale Support

Added Locale support to the String class.

Rather than each String method taking a Locale, the String class internally stores a pointer to a Locale, which is used for all operations on that string.  This pointer can be null (as it is by default) in which case the default locale is used.
IsBreak

Added the IsBreak method to the CodePoint class, which determines whether a grapheme cluster break occurs between two code points.
CodePoint operator ==

Added two overloads for operator == to the CodePoint class -- one which compares it to a char and one which compares it to a 32-bit unsigned integer.
DoesCompose

Added the DoesCompose method to the CodePoint class, which determines:

A. Whether two code points compose to form a new code point
B. Which code point they compose to

Also added the GetComposition method to the Locale class, which drives this functionality.
Grapheme Constructor Update

Fixed the Grapheme constructor which takes a char to make the conversion from possibly signed to unsigned more explicit.
Grapheme Non-Owning Constructor

Added a constructor to the Grapheme class which creates a non-owning Grapheme object (i.e. a Grapheme object which encapsulates a pointer to a Grapheme, but which does not own/manage the memory it points to, for example if that memory is part of a string).