Implemented the string class.
Added the VirtualString interface.
Added en/decoders between Unicode string and byte-strings.
Added the ByteString datatype.
Added the String, ByteString and VirtualString Oz modules.
Add the CMake rules as well.
raiseUnicodeError: One missing error.
Implemented small changes from the feedback.

1. s/NSTR/MOZART_STR/g
    - https://github.com/kennytm/mozart2/commit/35f1920#vm-main-core-forward-decl-hh-P5
2. Rename ExtraArgs to Args in raiseUnicodeError()
    - https://github.com/kennytm/mozart2/commit/7be27c1#vm-main-exchelpers-decl-hh-P6
3. ByteString.encode & .decode uses atoms instead of magic numbers.
    - https://github.com/kennytm/mozart2/commit/98b4fd8#vm-main-bytestring-decl-hh-P42
4. internal namespace
    - https://github.com/kennytm/mozart2/commit/5ce5dec#vm-main-float-hh-P13
5. Use pattern matching in withConsAsVirtualString()
    - https://github.com/kennytm/mozart2/commit/5ce5dec#vm-main-records-hh-P81
Rewritten the LString class to better reflect the instance's lifetime.

The LString class has been enriched with lifetime information. This caused
the class to split into 3 types.

1. The LString class, which assumes GC or permanent lifetime. This LString
   is similar to before, which has a 'string' and 'length' field. The
   content will be destroyed after GC, so this class should only be used
   when associated with a node.
2. The ContainedLString class, which has self-maintained lifetime. Instance
   of this type will have a standard C++ container (be it std::string or
   std::vector) associated, in addition to 'string' and 'length'. The
   content is valid as long as the instance is valid.
3. The BaseLString class, which is the superclass of the above. It assumes
   temporary lifetime.

A ContainedLString cannot be safely object-sliced to a BaseLString.

The LString and BaseLString exposed in the mozart namespace are immutable.
To obtain a mutable type, use mut::LString or mut::BaseLString.

Added a bunch of convenient methods to LString to simplify its common
usages.

Since LString has grown too much, it has been separated from utf.hh to
lstring.hh.

-----

Moved the implementations of coders.hh to coders.cc. Combined the two bool
fields of coders to an enum bitfield. This also reserve the opportunity to
introduce even more options to the coders.

-----

Migrated ozListForEach from boostenv/main to vm/main. The signature is a
bit different though. Also, included function_traits to reduce the need of
manually supplying some template parameters, when it can be deduced from a
function object (mainly used in newLString and ozListForEach.)
Coders: Switch from 'char' to 'unsigned char'.

UTF: Added sliceByCodePoints().
Adopted array indexing for String and ByteString; Added StringOffset.

The StringOffset type is added to allow string indexing be done in O(1)
instead of O(N), because UTF-8 and UTF-16 are variable-length encoding.
"Workaround" GCC bug 53026 and other gcc compatibility changes.

The workaround is simply omitting the const of LString<C> and
BaseLString<C>. Thus, developers working on gcc alone may not be able
catch some bugs. Not really a big deal though, since we can compile the
source twice anyway.

Also, disabled the trivial destructor static-assert section when
compiling not for libc++, because libstdc++ and MSVC still calls
is_trivially_destructible as has_trivial_destructor.

Conflicts:
	vm/main/string.hh
String/ByteString/StringOffset: Added test cases, and fixed some bugs.
Added StringLike.stringHas(Prefix|Suffix).

StringLike.stringSearch now returns both the begin and end offset of the
needle.

Removed VirtualString.vsChangeCase.
Remove those comparing unsigned with signed warnings.
Optimize the case 'StringOffset cmp 0'.
Added all Oz modules