Encoding Changes/Additions

Added the Endianness value to the EncodingErrorType enumeration, to be used when errors related to ambiguous endianness are encountered while decoding.

Changed the documentation for the Encoding::Count method to reflect the fact that it returns the number of code units -- rather than bytes -- that will be required to represent a certain code point.
EndanEncoding

Reimplemented the EndianEncoding abstract class.  Inherits from Encoding, and provides members and utilities for implementing encodings that have endianness (i.e. have a code unit which is greater than one byte in size).
UTF16

Implemented the UTF-16 encoding.
EndianEncoding Improvement

Moved the GetBOM implementation for encodings with endianness onto the EndianEncoding class, rather than leaving a sensible, byte order-aware implementation to derived classes (which would lead to unnecessary code duplication).
UTF32

Implemented the UTF-32 encoding.
Formatted Output

Added a templated operator << overload which accepts a std::basic_ostream (templated on any template parameters) and a Unicode string.  This function outputs the string to the output stream-in-question.

The encoding is chosen based on the endianness of the current platform and the size of the character type the output stream is templated on:

- For 1 byte character types, UTF-8 is used
- For 2 byte character types, UTF-16 with the same endianness as the machine is used
- For 4 byte character types, UTF-32 with the same endianness as the machine is used
- For all other character types, a static_assert causes a compile time error