element/html-element.js
function HtmlElement(tagName, special, general, children) {
    this.tagName = tagName
    this.specialProperties = special
    this.generalProperties = general
    this.children = children
    this.cl = null // elem.classList
    this.ds = null // elem.dataset
}
function HtmlElement(tagName, special, general, children) {
    this.tagName = tagName
    this.specialProperties = special
    this.generalProperties = general
    this.children = children
    this.cl = null // elem.classList
    this.ds = null // elem.dataset
}
/* a HtmlElement has a tagName, a hash of special attributes and a hash
of general attributes.

The special attributes have special rendering & updating logic
The general attributes are just set on the DOM element

The children array contains a list of Element instances that are appended
to this particular element when rendered