No longer storing instance data in array.

Instance data will be stored in a tree. Each member of a collection will
have a key based on an id derived from the collection object or else the
index of the object in the collection. The array was an early notion of
how to represent multiple instances of a directive.
Store marker in instance object.

Now storing the marker in the instance object instead of in a parallel
map of id paths to markers.
Store instances in tree.

Now storing instance data -- element counts, character counts and
markers -- in a tree. This is so that when we implement conditionals we
can free instance data by unlinking an instance from an tree and letting
it fall out of scope. All of the instance data of the child directives
will be only be referenced through the instance data of their parent
directives, so the unlinked instance data is garbage collected all of
the instance data of descendant directives will also be garbage
collected.
Implemented `if`.

Implemented an `if` with a test for when if is true.

Compilation now unfolds directives, moving thier contents out into the
document as next siblings, and then replacing the directive with a
marker. This makes the document consistent for the `rewrite` function.

The handlers for the directives now accept the current descent object so
that an if directive can clear the copy of the child directives when is
the condition is false so that the child directives are not evaluated.
Merge branch `if` into `redux`.