New Stateful base class.
Properties are set/read via standard JS syntax rather than set() and get().
Support widget property updates via direct access.
I.E. myWidget.foo = bar not myWidget.set("foo", bar).
get() was removed as set() only works for hashes.

Also created dui/register() method to be used in place of dojo.declare() for
creating widgets.

widget lifecycle changes
-------------------
On widget creation, only calls custom setters for widget parameters,
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)

Also, the custom setters are called before rendering. Previously they were called after rendering.
Added a runAfterRender() helper method for custom setters that need to register code to
be run after the DOM is created.

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 (before the postMixInProperties() call).

auto mapping removed
------------------
The auto-mapping of widget properties to the widget DOMNodes is complicated, and
no longer works: myWidget.disabled = true won't do anything unless there's a custom
setter for disabled.

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.
reactive templates via dui/handlebars! plugin and dui/template helper lib