In _introspect(), make sure "this" refers to the prototype.

Also changed _WidgetBase._introspect() to set properties directly in the prototype,
rather than on the constructor.
Make genSetter() map to DOMNode properties, not attributes.
Mapping to properties will work with DOMNodes that are widgets, and also with input.value.
It won't work for things like aria-disabled though, that must be set as attributes.
Support widgets in templates.

Part of this change is to make templated set the DOMNode property or the DOMNode
attribute, depending on which field you are trying to set.
Often setting either one is OK, but you need to set properties to
affect input.value and widgets, and you need to set attributes for
things like role, that have no associated property.
migration notes for dcl
use :hover and :active rather than class names from _CssStateMixin
Simplify _CssStateMixin.

1. Remove detection for hover and active (just use :hover, :active or mobile equiv).
2. Remove multiply.  For CSS rules matching multiple conditions, use something
    like .duiToggleButtonChecked.duiToggleButtonDisabled rather than
    .duiToggleButtonCheckedDisabled.
3. Remove CSS setting for sub nodes; it was mainly hover and active anyway.
Migration from dojo/_base/array to ES5 functions (and some unrelated cosmetic fixes)
fixes based on Bill's comments
fix accidental global
rename autoFocus to focusOnOpen; autofocus has native HTML meaning
Stateful: skip properties in HTML*Element.
getPropDescriptors() should check name of constructor, not prototype
Button: don't extend FormWidgetMixin and don't override native prop "type"
fix calling custom setters of watched props on FF
Fix Destroyable::own to return an actual array so that .forEach(...) can be used on the return value.
add jshintrc (but code is not reformated)