Introduce UnicodeChar

UnicodeChar replaces both CodePoint and UnicodeData. It's an object
oriented class that encapsulates a Unicode code point along with common
operations on them. This is intended to contain most of the
implementation for the character-related standard library functions.
Add CharacterValue and writer

The CharacterValue standard library support is implemented on
UnicodeChar which CharacterValue is a simple container for.
Don't override CMAKE_CXX_FLAGS completely

Instead of setting CMAKE_CXX_FLAGS to "-Werror -Wall" append those flags
to the existing variable. This makes CMake work properly when CXXFLAGS
is set using the CXXFLAGS environment variable.
Typo fixes
Add UnicodeChar as a distinct native type

This adds an nfi.UnicodeChar native type which is an i32 representing
the Unicode codepoint which has a distinct type from all other integer
values. The intent is to have most character-based standard library
functions accept and return unboxed code points whenever possible to
avoid the boxing/GC overhead of true CharacterValues

At the same time remove the ambiguous "wchar" integer alias. The new
"unicode-char" is both more explicit and type safe than "wchar".
Rename the NFI boxed datum symbol to "boxed-datum"

The previous "boxeddatum" symbol was inconsistent which most other
Scheme symbols which are typically hyphen separated. This was especially
obvious in the NFI interface which used "utf8-string" and "unicode-char"
elsewhere
Generate type assertions for abstract types

This allows abstract types such as StringLike to have type assertions
automatically generated by using the union of the types of their
subclasses. This is the groundwork for adding a new Numeric type which
will be a union of ExactInteger and InexactRational
Add Numeric native type

This is a memberless abstract base type for ExactInteger and
InexactRational. This is intended to be used for the NFI of the number
standard library. In Scheme semantics there's only a single number type
so the standard library has to handle the two underlying types almost
interchangeably