More ports from aria-toolkit and enhancements

* Implicit semantics
* More audits:
 * RequiredOwnedAriaRoleMissing
 * DuplicateId
 * RoleNotScoped
 * BadAriaAttribute
 * UnsupportedAriaAttribute
 * AriaOnReservedElement
* Fixed BadAriaRole audit to handle abstract roles
* Several supporting changes and optimizations to utility methods and constants.
* A few minor formatting tweaks

I wonder what that would look like to a user? Would the sub-menu appear as a menu item? I'm not even sure what the right thing to do would be in that case - maybe it should be a tree instead... anyway, that's somewhat tangential.
I think this is enough of an edge case that we probably don't need to worry about it.