compiler: Support define-values, define-values:

- Add et.Binding class with et.SingleBinding and et.MultipleValueBinding
  as its subtypes

- Change et.TopLevelDefine and et.InternalDefine to use et.Binding for
  their list of binding

- Separate out and generalise ParseLambda's operand list parsing in to a
  separate ParseFormals function

- Have ModuleBodyExtractor use ParseFormals to parse (define-values) and
  (define-values:) and create MultipleValueBinding instances

- Update the analyser and retyper to handle multiple value bindings. In
  general they're ignored as we don't have enough information about
  multi-values to optimise them

- Add multiple value binding support PlanBind by using DestructureList
  to pull the values out of the initialiser's multiple value list
compiler: Use unique error names for arity errors

The nativeSymbol value in ArityRuntimeErrorMessage is no longer unique.
When generating adapter procedure cells it will always be "procedure".
This means we could generate distinct runtime error messages with the
same name.
Add procedure examples from R7RS

These are fairly trivial and previously worked. They're added just for
completeness.
Add R7rS (if) and (cond) examples
Add macro examples from R7RS
runtime: Rename abstract port helper classes

AbstractInputPort and AbstractOutputPort are only intended for port
excusively supporting input and output, respectively. Combining the two
base classes makes no sense as it would result in a port supporting
neither input or output.

Instead name the classes AbstractOutputOnlyPort and
AbstractInputOnlyPort and add Doxygen comments
runtime: Implement (u8-ready?)

This is hard to properly test as the only streaming input port we have
access to is stdin and we don't have a way to cause data to be written
to it.
stdlib: Implement (char-ready?)

This is built on top of the same bytesAvailable() function as
(u8-ready?). It's fairly complex as it need to ensure an entire UTF-8
byte sequence is ready. It does this by reading the header byte then
attempting to read the reset of the sequence. After detecting if the
read would block we then put the read bytes back.
stdlib: Better detection of EOF in number->string

We don't need to read a second datum to check for extra data at the end
of the number string. Instead, we can just check for EOF directly.
stdlib: Add (llambda complex-stub)

This has the same interface as (scheme complex). However, as numbers
with imaginary parts are not supported it's of little practical use.
It's not named (scheme complex) to prevent programs doing feature
detection with (cond-expand) from determining the complex numbers are
supported.

This is mainly intended to be re-exported as part of the r5rs library