Decode decodes the given KV pairs into the given element.
The operation goes through three stages roughly summarized as:
KV pairs -> tree of untyped nodes
untyped nodes -> nodes augmented with metadata such as kind (inferred from element)
"typed" nodes -> typed element.