Data: move element cache to element[expando]

- avoid explicit data.discard() cleanup calls
- explicitly remove the data.events property
- reduces code footprint

Fixes #11570
Rather than doing this, we should do something like

```js
return this.expando in owner && !jQuery.isEmptyObject( owner[this.expando] );
```

Which avoids needlessly creating an empty object if the cache didn't exist on the element