Bug in calling sprockets.trigger(). Not sure it even worked properly before.
Remove Legacy.js. MutationEvents or MutationObservers are now a requirement and will be too heavy to polyfill.
`preventDefault` is no longer a handler configuration option.
Use event.defaultPrevented and event.preventDefault()
Element.prototype.hidden and Element `visibilitychange` event
TODO non-reflow work-around
`visibilitychange` events aren't cancelable.
TODO make more callbacks async
Base sprocket uses .getAttribute('class') instead of .className.
Hopefully more compatible with xmlish tags which may only be Elements,
not HTMLElements.
Refactor sprockets.Base.
Also sprockets.Base#attr(attrName) returns null for "not present"
and sprockets.Base#attr(attrName, null) removes the attribute.