ProperList improvements

- Inherit publically from std::iterator. This allows STL's range-based
  constructors to recognize us as valid iterators

- Fix the value type of ProperList::ConstIterator to indicate it returns
  a pointer to its template type

- Fix preincrement and add postincrement to ConstIterator

= Use BoxedEmptyList as our end iterator value. This simplifies the code
  and removes a branch in operator++

- Add isEmpty() helper method

- Add ProperList unit tests
Clarify SchemeFunctionalTestRunner errors

- Indicate if execution of the test program unexpected succeeded or
  failed

- Detect if we can't load our Scheme test source instead of deferencing
  null
Treat Scheme source and program output as UTF-8

R7RS doesn't appear to specify source encoding; however, UTF-8 is a sane
default. Also parse the output of functional tests as UTF-8. Llambda
programs perform I/O in UTF-8 so the previous code was simply wrong.
Add partial implementation of string library

This is mostly to test the new ProperList functionality. Many of the
string library functions have optional arguments which we do not support
yet.
Replace FreezeGc with RangeAlloc

RangeAlloc is a wrapper class around alloc::allocateCons() that has
iterators for iterating over the allocated area. This has a few
advantages:

- Like FreezeGc it requires calculating the number of Conses up front.
  However, as long as only one allocation is made at a time a global
  freeze count doesn't need the be maintained. FreezeGc could
  technically be nested but the nested FreezeGc blocks had no way to
  ensure their allocation. It's safer to only allow the one level of
  nesting that can be guaranteed by the GC.

- The pointer arithmetic is done internally in Cons increments.
  (make-list) was using BoxedPair-based arithmetic which happens to
  work but is technically incorrect and fragile if Cons changes.

- In debug builds the range iterator is bounds checked. In release
  builds the code should compile away to simple pointer arithmetic.

In addition this changes BoxedListElement to layout the list in
forward sequential order in memory. CPUs generally have an easier time
performing forward memory prefetches so this should be a slightly more
optimial layout.