runtime: ProperList::{ConstIterator => Iterator}

Constant iterators return const values. The ProperList iterator is just
a normal iterator.
stdlib: Fix typo in lliby_append

appenedElements => appendedElements
stdlib: Implement (map) and (vector-map)

This implements (map) and (vector-map) along with (for-each) and
(vector-for-each) as aliases.
runtime: Optimise creating empty lists

Have ListElementCell::createList() return early if it's creating an
empty list. This seems like a microoptimisation but it actually
noticably speeds up the functional tests with GC debugging enabled.
stdlib: Use std:: prefix for number types

The number comparison functions were using both std::int64_t and
int64_t. Always use std::int64_t for consistency.
stdlib: Support for (char=), (char<) etc

The logic is based off a simplified version of the numeric comparisons.
Character and string fixes

- Handle characters in C++ implementation of (eq?), (eqv?) and (equal?).
  Previously they were always considered inequal due to a completely
  missing test.

- Handle characters outside the BMP in the compiler. This involves using
  Int instead of Jaa's builtin 16bit Char type.

- Fix the (string->list) functional test to expect success
compiler: Add planning for (min) and (max)

This reuses the existing operand comparison logic to implement (min) and
(max) in the planner.
Add Levenshtein distance functional test

This tests simple string and character manipulation
compiler: Prefer compact return types from lambdas

When planning typed recursive lambdas prefer compact (e.g. unboxed)
values. This avoids having to box values simply to return them. For
non-recursive typed lambdas the the preferred return type will still be
used.

This is a similar tradeoff to a accepting compact arguments - this is
only a win if the procedure computes using unboxed arguments.
compiler: Planning for integer<->char conversion

Integers and characters have the same native representation so it's
trivial to convert between them.
compiler: Planning for char comparisons

This adds planning for (char=?), (char<?), etc. The logic is similar to
that used by the integer comparison procedures.