With the current low-tech approach to typing/validity checking for Lkt,
it is not possible to infer whether N designates a bare node type or an
entity type. Introduce a different syntax for entity types to avoid this
problem.
Unwrapping an array of structs is meant to take the ownership share for
these structs, and thus to clear them. This means that the destructor of
Python wrappers for structs must handle the case where they no longer
have the ownership of a struct value: they didn't so far, which
triggered crashes.
TN: UA05-027
As the LexicalEnv.get method always return an array of root nodes
while the root node is defined in user code, we need to turn the Node
and LexicalEnv classes into generic traits and instantiate them using
the actual root node.
To make this works, root node declaration has to be changed from
`class FooNode : Node` to `class FooNode implements Node[FooNode]`,
which required to refactor a bit almost all the lkt tests.