core: Make Element#attr() more like jQuery's

When setting an attribute with the value null or undefined, the attribute is removed instead of the
current functionality where the string "null" or "undefined" would be set as the attribute value.
test: Updated QUnit to v1.16.0
test: Pre-migrate to QUnit 2.x