UCD Parser Fix

UCD Parser now correctly derives the Full_Composition_Exclusion property.
UCD Parser Command Line Arguments

The UCD parser now accepts a path to the Unicode Character Database (unzipped) as its first command line argument, a path to the output file as its second.
Remove data.cpp

The data.cpp file should be rebuilt from the UCD when needed.  It is no longer part of the repository.
Array Fix

Tweaked/fixed the Array class so that it now stores/wraps a const pointer.

Given that it's raison d'être is to wrap compile-time, constant C-style arrays and give them C++-style abstractions, it doesn't make sense for the stored pointer to be mutable.
Parser Fix

Removed an unused variable in parser.cpp.
Parser Enum Fix

The UCD parser was outputting C++ source maintaining the UCD naming conventions for enumeration values (i.e. with underscores between words).

Fixed to output with the current project's naming conventions (i.e. no underscores).
data.hpp Rename

Renamed unicode/data.hpp to unicode/ucd.hpp to better reflect its purpose -- providing utilities for parsing the Unicode Character Database.
Parser Restructure

Moved the source for the UCD parser from src/data to src/parsing to better reflect its purpose.

Also updated include directives in these files to properly include unicode/ucd.hpp rather than unicode/data.hpp.
unicodedata.dll Build Rule Fix

unicodedata.dll no longer depends on condition.o, and condition.o now serves a totally different purpose than when the build rule was written.  Consequently this dependency has been removed.
Makefile Cleanup

Removed unneeded variables from Makefile which were a holdover from a previous project from which the Makefile template was hoisted.
Item Fix

Changed a line in item.cpp so that file would build with Clang as well as GCC.
Parser Output Changes

Had to make several changes to the way the UCD parser generates output:

Changed the way that std::optional and Unicode::Array objects were serialized.  Previously std::optionals were output as simply the value itself (if the std::optional was to be engaged) or as "std::nullopt" (if the optional was to be disengaged).  Unicode::Arrays were output as "{nullptr,0}" if they were to be empty.  GCC would not compile this.  It would balloon up to 6 gigabytes of memory usage, take well over an hour, and eventually fail and die with a segmentation fault/internal compiler error.  Outputting std::optionals as either "{}" (if to be disengaged) or the value enclosed in curly braces (if to be engaged), and outputting empty Unicode::Arrays as "{}" ameliorated this completely and reduced the compile time to less than a minute.

Under the previous scheme the parser output an array of std::pairs, which "mapped" a CodePoint::Type to a CodePointInfo (allowing the array to be searched).  GCC compiled this, but for some reason it caused a segmentation fault in the constructor of some std::pair during startup.  Why the constructor of any std::pairs were being invoked at all given that the memberwise constructor is constexpr (verified in the bits/stl_pair.h header that GCC supplies) remains a mystery.  To fix this the parser now outputs an array of CodePointInfos, the definition of CodePointInfo having been changed to include a CodePoint::Type as its first member.  Worth noting that if all entries from the UCD after and including U+20D3 COMBINING SHORT VERTICAL LINE OVERLAY were removed from the output source file this problem disappeared.
Parser Tweak

The UCD parser now outputs Condition objects as a boolean and a string, rather than using a boolean and a function pointer when the condition-in-question is not a language condition.

This will allow the resulting source file to be built without linking in all those functions.
Parser Fix

The UCD parser was outputting erroneous values for case mappings, as it was fetching the offsets from the wrong array (the code point array rather than the case mapping array).
UCD Build Rule

Added a rule to the build system to build the data.cpp file by using the UCD parser when it is not present/outdated.
Makefile Tweaks/Cleanup

The invocation of GCC no longer uses a specific path, instead relying on g++.exe being in the PATH.

Also: Switched back to using GCC 4.8.1 (from 4.9), so using -std=gnu++11 rather than -std=gnu++1y.
Data Retrieval

Added a header which provides functions for retrieving the begin/end iterator to the parsed Unicode Character Database array.

Added implementations for these functions in a file which uses an include directive to pull the parsed UCD in.
.gitignore

Updated .gitignore to reflect new repository structure (i.e. the fact that the data.cpp file now resides in src/data rather than src).
Remove Compositions

Removed the compositions.cpp source file, which contained a list of compositions for placing Unicode text in NFC.

A utility will be written to dynamically derive this file from the UCD as/when needed, and it will be acquired that way rather than being statically included in the repository.