[1923] Add API for let() and stub out building let nodes
[1923] Initial implementation of let nodes, passing
Remove unnecessary boxing of id * as NSValue
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
Add functional test to show more complicated let node nesting
Fix infinite loop caused by adding identical let nodes to the same tree
Expand let context tree functional test to cover dependent nodes
Add unit tests for KWLetNode; expose next/previous/parent/child as readonly properties
Add unit tests to cover let node tree behaviour; fix unlinking behaviour

When unlinking a subtree of a let node tree, the parent or previous
node of the unlinked node would still have a reference to it. Inverted
the unlinking so that unlinked nodes are completely detached from the
tree.
Add test for let node working with example node visitors
KWLetNodeTest: Use STAssertNil instead of STAssertEqualObjects where appropriate
KWContextNode: Add tests for adding let nodes
KWContextNode: expose -letNodeTree and add tests
Merge remote-tracking branch 'origin/master' into let

Conflicts:
	Kiwi.xcodeproj/project.pbxproj
Add KWLetNode to Kiwi-XCTest target
KWLetNode: split compound assignment+return into two statements