Export elements as models rather than elements (#1179)
Previously exports such as "uint16" were pure data. Now they instead export as the models that appear in the
canonical Matter tree. This makes them more useful operationally.
The canonical "Matter" export is now a model tree. The element tree is still available as
"MatterDefinitions".
Adds a new "extends" operation that makes it more convenient to create operational models. For
example, previously we did `new AttributeElement({ ...FeatureMap, /* etc. */ })`. Now you can instead
do `FeatureMap.extend({ /* etc. */ })`. This is more than just syntax as the operational extension
inherits from the extended model rather than cloning all properties.
Modifies the model implementation to specify the element type and child element types using template
parameters. This simplifies the definitions and makes it possible to better define types on the base
Model class.