Fix crash from treating an array of KWLetNodes as array of arrays
Redesign KWLetNode as recursive node structure; extract node construction out of KWContextNode

The structure of KWLetNodes previously created by KWContextNode was
incorrect: it was static, in that it was constructed once when building
the example suite, and didn't reflect the tree of context nodes in which
they may be defined (so if a child context defined a new let node for
the same symbol, it would override any other value for that symbol, in
all contexts!).

This redesigns KWLetNode to define a recursive structure, wherein a
node can have children (representing mulitple blocks for the same same
symbol name), and next/previous, which defines the order in which
symbol names are introduced (and thus the order they should be
evaluated).

Now, each context node maintains just the array of let nodes declared
within it. The recursive structure is rebuilt before each example to
reflect only the context in which an example is executing, and then
torn down after the example finishes by sending the root let node the
'unlink' message.
Refactor let node evaluation to follow the example node visitor pattern
Fix issue where let variables would always be nil

In short, the pointer that the let macro passed into let_ points to the
stack location of the declared variable, whereas when an example node
block capturing a reference to the variable is copied, it now
references the heap location.

So even though the stack variable pointer is dereferenced and assigned
the return value of the block, *the heap version is still nil*.

This is fixed by creating a block, copying it, capturing a reference to
the heap location, and then returning a pointer to it.
Add detailed documentation for the let() macro