stdlib: Implement (let-values:), (let*-values:)

These are typed versions of their R7RS counterparts. This is
particularily useful now as we don't feed type information to lambdas
used as arguments yet.
stdlib: Implement string comparison procedures

This implements (string=?), (string<?) etc. in (scheme base) and their
corresponding case insensitive versions in (scheme char)
stdlib: Reorganise Portsuite tests

Use assertions instead of multiple standalone tests. This should make it
more manageable to expand the tests in the future.
stdlib: Implement (textual-port?), (binary-port)?

These are simple aliases for (port?). There are no plans for disjoint
textual and binary port types.
runtime: Introduce AbstractPort

This is an abstract class that serves to define the interface of C++
port implementations.

- Define AbstractPort class with virtual functions corresponding to
  R7RS procedures for port predicates and closing ports. Actual input
  and output are performed using the inputStream() and outputStream()
  functions to access a C++ iostream.

- Add StandardInputPort and StandardOutputPort implementations of
  AbstractPort. These use close(2) to close the raw file descriptor for
  the standard input or output when requested.

- Instead of storing a raw std::ios stream pointer in PortCell instead
  store an AbstractPort*

- Implement (input-port-open?), (output-port-open?), (close-port),
  (close-input-port), (close-output-port) as simple proxies for the
  corresponding AbstractPort functions.