Makefile Update

Brought the Linux makefiles up to date with the Windows makefiles.

Added a rule to data.mk download allkeys.txt from unicode.org if it's not present in the UCA folder.

Broke the cleanup rules out better, moving data-related cleanup into data.mk.
Unit Test Tweaks

Added a toString method for the String class to the unit tester.  This allows Catch to properly output String objects when breaking out conditions for display.

For whatever reason (I don't know the internals of Catch) this had to be placed before Catch was included, which drove the include directive for Catch below the other include directives, which eliminated the need for preprocessor hacks to protect LineBreak::IN from unwanted macro substitution.
String Unit Test Fix

Fixed the String trim unit tests.  The string being used to test detection of Unicode whitespace was supposed to have a leading and trailing NO-BREAK SPACE (U+00A0), but didn't.
std::hash<String> Unit Tests

Added unit tests for the specialization of the std::hash template for the String class.
String Appending and Concatenation

Added support for appending code points and other strings to strings through operator <<.

Added support for concatenating strings and code points through operator +.

Code points may not be on the left hand side of operator + for now.  This will be fixed in the future.
Integer Conversion

Added the Converter class template, which may be specialized to provide conversions from a String to some object, and vice versa.

Added a specialization for all integer types, allowing the parsing of arbitrarily-typed integers from Strings, and the conversion of arbitrarily-typed integers to Strings.

Also added integer conversion-related properties to the Locale class:

- An array which maps numeric values to code points which should be used to represent them
- An integer which contains the default base which should be used for converting to/from integers
- A code point which contains the symbol that should be used to indicate that an integer is negative

Also added unit tests for all new functionality.
Converter Reorganization

Reorganized the way the Converter class is implemented.

Previously the Converter class was implemented directly, exposing the fact that it had two template parameters (one of which was a dummy for SFINAE).

The reorganization renames the Converter class to ConverterImpl, and implements a Converter class which simply inherits from this ConverterImpl class, hiding the SFINAE template parameter.
String C Style String Constructor/Assignment Overloads

Added overloads for the String class' constructor and assignment to take C style strings of the following types:

- wchar_t
- char16_t
- char32_t
UTF-16 Fix

Fixed a bug in the UTF-16 decoder.

After combining a lead/trail surrogate 0x10000 was not being added to the result, yielding incorrect decoding results for strings containing lead/trail surrogate pairs.
String Constructor Unit Tests

Added unit tests for all String constructors.
String Copy Construction/Assignment Unit Tests

Added unit tests for String copy construction and assignment.
Automatically Run Unit Tests on Build

Tweaked test.mk so that whenever the unit tests are rebuilt, they will be run automatically.
Floating Point Conversion

Added a specialization of ConverterImpl for all floating point types.

Currently leverages C/C++ standard library functionality, and is therefore not truly internationalized.  That will be fixed in the future.
String Conversion Improvements

Changed the CString class -- which encapsulates a C-style string, using RAII to manage its dynamically allocated memory, and being implicitly convertible to const char * -- to be a template.  Now it may encapsulate a C-style string which uses characters of any type.

Rewrote the String::ToCString method to take a template parameter (defaulted to char) to determine what type of characters to use for the resulting C-style string.  An encoding is chosen appropriately based on the size of the requested characters.

Added the String::ToOSString method, which returns a CString using a character type suitable to be passed to underlying operating system APIs.  For Windows this is wchar_t (UTF-16LE), for other systems this is char (UTF-8).

Added the String::ToString template method.  It returns a std::basic_string using a character type given by its template parameter (defaulted to char).
IOStream Support Refactor

Using the newly-added String conversion methods, was able to remove most of the code in the iostream.hpp header.
Unit Tests Cleanup

Split the IsEquals functions into two different functions:

- IsEquals compares two collections for equality, ignoring the type and signedness of each element
- IsByteWiseEquals compares two contiguous collections for byte-wise equality

The new functions are much more generic than the old functions.
Converter Cleanup

Fixed a style issue and added/fixed some documentation in converter.hpp.
String Converter Integration

Added the IsConvertible helper template class to converter.hpp.  This template can be used to determine if a certain type is convertible to/from String via the Converter class.

Added constructor/assignment overloads to the String class such that for an object of any type T such that IsConvertible<T>::Value==true, that object may be used to construct a String, or may be assigned to a String, and this will result in the String containing the string representation of that object as obtained by the Converter template class.
Integer Conversion Unit Test Addition

Added a unit test to make sure that the integer specialization of ConverterImpl handles an empty string represented as a null begin and end iterator correctly.
String Move Construction/Assignment Unit Tests

Added unit tests for String move construction and assignment.