feat(NodePath.prune): add a new method to NodePath `prune`

This method removes a node and its parent if the parent has no other child nodes.

For issue #65 
Well, `VariableDeclaration` nodes also aren't supposed to have empty `.declaration` arrays, which is one of the things `.prune` helps prevent.

If you do `ifStmtPath.get("consequent").remove()`, then `ifStmtPath.value.consequent` will end up `null`. I'm just suggesting that `ifStmtPath.get("consequent").prune()` could be smarter than `.remove()`.

I think `BlockStatement`s containing no statements should probably be left alone, since they're perfectly valid in the language.