Remove stale comments referring to asciiOnlyHint
Add StringValue::{replace, compare}

- StringValue::replace replaces one substring with another of the same
  character length from another string. This is intended to implement
  (string-copy)

- StringValue::compare compares two StringValues by their Unicode code
  points. the return value indicates the direction of the inequality in
  the manner of memcmp(). This method will be extended in the future to
  support case insensitive comparisons
Add implementation of InexactRationalValue

This is a simple wrapper that adds some utility methods for dealing with
NaN, +inf and -inf
Add PairValue::create{Proper,Improper}List

These are helpers for creating Scheme lists from STL lists. Performance
sensitive code may want to build lists manually anyway to avoid the
temporary list construction.
Add generated C++ type predicates

This is a bit less clunky than comparing asTypeName to nullptr
Partial implementation of ExternalFormDatumWriter

This can output the external forms for unspecific, pairs, empty list,
booleans, integers, rationals, symbols and strings. The output format is
a bit more natural that the one Llispy used. In particular, lists are
written in list form instead of nested pair form.
Fix off-by-one error in string range handling

The runtime was treating the "end" of the range as inclusive while R7RS
defines it as exclusive. Fix by following the R7RS behavior. This also
happens to simplify the code somewhat.
Clean up StringValue unit tests

- Remove unused inclusion of <assert.h>

- Add "using namespace lliby" to the top of the anonymous namespace
  and remove it from the individual test functions
Check for StringValue::byteLength overflow

In the case of ::fromAppended() this is exploitable. If the sum of the
sizes of the appended strings is > 4GiB the length will wrap and we'll
underallocate. However, we'll still copy the contents of the appended
strings over the unallocated memory.