Port of V1 code to support native getters/setters on top of old widget architecture.
Hopefully in the future, dcl() will support native getters/setters, and then this
introspection code looking for _setFooAttr properties and dynamically creating accessors
can be removed.

The auto-mapping of widget attributes to the widget DOMNodes is complicated, and
it's not working yet: myWidget.disabled = true won't do anything.

Eventually widgets will be extensions of HTMLElement, so that any widget properties
that map to the top level DOMNode will be handled automatically.

But for properties that map to a subnode of the widget, like tabIndex mapping to
this.focusNode (where this.focusNode is a descendant of this.domNode), they will need
custom setters, either as part of the widget definition or generated dynamically.
Button: update test to use native accessors not set() and get()
Rip out obsolete methods like get().   Change set() to just do hashes.
First pass at getting watch() to work.

Inserts custom setters in order to track changes to values.
Only call custom setters for widget parameters, and before rendering.

In V1, it called the custom setters for properties not passed into the constructor,
as long as the default value was truthy (see https://bugs.dojotoolkit.org/ticket/7381)

It's unclear if we want to call the custom setters before or after buildRendering().
For now it's calling the custom setters first, because they are called implicitly
when the properties are mixed in.
update custom setters to handle running before render
work in progress for handlebars plugin
Support attributes with hardcoded text and handlebars expressions, ex: class="dijitReset {{iconClass}}".
Also support innerHTML with both text and sub-nodes, ex: <button> <span>...</span> {{label}} </button>.
architecture notes on native accessors and _WidgetBase.watch()