Implement false `if` directive.

Correctly reconstituting a Stencil document that contains an `if`
directive.

Implemented `if` false.

Noticing now that I do want to nest directives underneath an `if`
statement in a directive path, even though each directive underneath an
`if` statement is unique. The new path key is an array that navigates a
tree of instance data, so long keys don't bother me as much, since each
part of the path exists only once in the tree.

Yes, long hash keys bothered me, even though as long as they may get,
they'd never reach a maximum key length. I thought it would be ugly if
it ever got displayed or used in debugging.

Now the instance data is a tree, so we could free instance data with the
directives underneath an `if` directive, if the instance tree was
parallel to the directive tree. The shortened paths do not create a
parallel instance tree.
Implement rewrite of true `if` that was false.

When an `if` directive is false, the DOM elements underneath the `if`
directive are removed from the DOM. When we update the DOM and the `if`
directive is true, then we need to re-insert the elements from the
template.

I've begun to call the serialized document paired with the instance tree
a page.

I am now converting a template to a page, then reconstituting it to get
a DOM with a parallel instance tree that can be used to scavenge
directive descendants that have been removed.

In the next commit, a template will contain two documents; the template
document and the template document converted to a page, a scrap page.
Scavenging will be a function against the page where a particular
directive is unmarked, removing it from the tree but gathering it into a
document fragment. The document fragment is imported into a new
document, creating a clone that can be inserted in the new document.
Then the fragment is linked back into the scrap page.

The cloned and imported fragment is linked into the rewrite page. The
'comments` function that is used by `reconstitute` to build the parallel
instance tree is run against the descendants added to the rewrite page.

In this commit, I've updated `unmark` to optionally gather up the
unlinked nodes in a document fragment. If the last argument to unlink is
a document fragment, the fragment will be populated with the unlinked
nodes, sans the marker itself.

The `instantiate` function has been broken out of the generate function.
It is now synchronous. It descends the tree unraveling the directives
into their flattened commented form. It will get wrapped up into a
template compilation function that creates the scrap page.

The `comments` function can now be told to descend a single unraveled
directive by specifying a start node that is a marker comment. It will
stop iterating the parent node's list of children when it reaches the
end of the unravelled children of the directive.

The object returned from Stencil is now the page object itself. The user
must dereference only the document property and leave the rest alone.
Merge branch `if` into `redux`.