fix(jqLite): data should store data only on Element and Document nodes

This is what jQuery does by default: https://github.com/jquery/jquery/blob/c18c6229c84cd2f0c9fe9f6fc3749e2c93608cc7/src/data/accepts.js#L16

We don't need to set data on text/comment nodes internally and if we don't
allow setting data on these nodes, we don't need to worry about cleaning
it up.

BREAKING CHANGE: previously it was possible to set jqLite data on Text/Comment
nodes, but now that is allowed only on Element and Document nodes just like in
jQuery. We don't expect that app code actually depends on this accidental feature.
perf(jqLite): optimize element dealocation

Iterate only over elements and not nodes since we don't attach data or handlers
to text/comment nodes.
perf(jqLite): use classList for class manipulation if available

All elements/browsers that don't have classList will still use the old setTimeout method.
perf(jqLite): optimize adding nodes to a jqLite collection

This code is very hot and in most cases we are wrapping just a single Node so
we should optimize for that scenario.
perf: optimize internal isWindow call

Each window has a reference to itself, which is pretty unique so we can use
that to simplify our isWindow check
chore: name the event callback used by ngClick and friends

This maskes looking at stack traces easier.

Since we generate the callbacks for each event type at runtime and we can't
set function's name because it's read-only, we have to use a generic name.
perf(jqLite): improve performance of jqLite#text

This change is not compatible with IE8.
test(jqLite): add a missing test for jqLite#text