Merge branch 'linux'

As the repository now builds on Linux, merging this branch.
.gitignore

Beginning work on implementing the Unicode Collation Algorithm (i.e. UCA).  Accordingly a copy of the Default Unicode Collation Element Table (i.e. DUCET) will be required.  Since the Unicode data files are not logically part of the repository, added a rule to .gitignore to ignore the UCA folder, where the DUCET data file (i.e. allkeys.txt) will reside.
.gitignore

Changed the rule which ignored test.cpp to ignore the entire src/test directory.
Line Update

Updated the Line::Get static method so that it will ignore the @version line in allkeys.txt.
UTF16 Fix

UTF16::CodeUnit was incorrectly typedef'd to std::int16_t rather than std::uint16_t.
Item Integer Parsing Refactor

In preparation for parsing the DUCET data file made the helper function template get_code_point into a function template called get_integer.  Rather than extracting an integer of CodePoint::Type it now extracts an integer of arbitrary type.  This was necessary as the integers which make up collation elements are 16 bits rather than 32.
Item Integer Parsing Fix

Fixed a type mismatch problem in the static add_digit helper function in item.cpp.
Item Collation Elements Parsing

Added the CollationElements method to the Item class, which parses collation elements from an item on a line of allkeys.txt (or another similarly-formatted file).
Array Additions

Added a new constructor to the Array class template.  The new constructor is constexpr (like the other constructors) and takes a reference to a C array.  It is templated, deducing the size of the array through a std::size_t template parameter.

Added a global helper function template MakeArray, which deduces the type of a C array, and returns an Array object encapsulating it.

This functionality was previously in getdata.cpp as a private helper function template.  Accordingly modified getdata.cpp to use the global functionality, greatly simplifying the code in that file.
Parser Output Cleanup

src/data/data.cpp does not require an include for unicode/conditions.hpp, however the parser was outputting an include directive for it.  Rectified this.
DUCET Parser

Wrote a utility to parse the DUCET from allkeys.txt into a C++ source file -- src/data/collation.cpp -- containing an array of CollationElementTableEntry structures.

As recommended by Unicode Technical Standard #10 (Unicode Collation Algorithm) code points that have a decomposition are filtered out during parsing and do not appear in the final C++ source file.
.gitignore

As src/data/collation.cpp can be rebuilt from allkeys.txt at any time, a prebuilt version of it is not part of the repository, and therefore it should be ignored.
Collation Getter

Added a global function called Collation to unicode/data.hpp which retrieves the collation element table.
Add Collation to Locale

Added a property for the collation table to the Locale class.

The default locale will now be initialized with the DUCET for its collation table.
Variable Weights

Updated the DUCET parser and UCD utilities to extract whether a collation element has a variable weight, in addition to the collation element itself.

This necessitated changes to the structures in which this data is stored.

Simultaneously renamed the Collation global function, and the Collation property of the Locale class to CollationTable.  This name better reflects what the function does/property is.
Vector Utilities Additions

Added 4 new function templates to the unicode/vector.hpp header, which take a pointer typed iterator, and an optional std::vector, and return the pointer typed iterator unchanged if the optional is disengaged, otherwise an appropriate pointer typed iterator to the std::vector.

Similar function templates were previously provided in comparer.cpp.  These have been removed and the code that used these has been altered to use the new, global versions.
Collator

Implemented the Collator class, which collates Unicode strings.

Lacks documentation.

VariableWeighting::ShiftTrimmed is not implemented yet (it operates identically to VariableWeighting::Shifted -- the final pass to trim 0xFFFF weights is unimplemented).

Getters/setters for options are missing.

Several swathes of functionality are completely untested (such as backwards level 2, and VariableWeighting settings other than NonIgnorable).

Collation element derivation for ideographs is unimplemented, as the CodePointInfo structure does not presently contain the Unified_Ideograph property, which is necessary to implement this functionality.
VariableWeighting Rename

Renamed the VariableWeighting enumeration to VariableOrdering, which reflects the nomenclature used in UTS #10.

Also renamed the vw private member of the Collator class to vo to reflect this name change.
Collation Elements Retrieval Fix

Fixed a bug in the way that collation elements were retrieved from the collation element table.

When matching the longest initial substring, if the first character could match by itself or at the beginning of a sequence, the search must continue (otherwise contractions will be missed).  However, when this continued search failed, the retriever failed to backtrack to the last match, instead fetching an erroneous contraction.
Blanked Fix

Fixed a bug in the way the Collator handled variable collation elements when the variable weighting setting was Blanked.

The Collator was only checking that the previous collation element was variable before treating the current collation element as ignorable, rather than checking that the previous collation element was variable and that the current collation element is primary ignorable.