Data: move element cache to element[expando]

- avoid explicit data.discard() cleanup calls
- explicitly remove the data.events property
- reduces code footprint

Fixes #11570
In https://github.com/jquery/jquery-ui/pull/1309 I'm trying to get them to use `$.hasData` in the pseudo selectors that they've created in order to avoid potential memory leaks on sets containing detached nodes.  Assuming that's accepted, this would avoid creating N objects where N is the # of DOM nodes that do not not currently have data in the case that you do something like `$( this ).find( ":ui-spinner" );`

If there's concern about the cost of the `in` operator, you could also do

```
var cache = owner[ this.expando ]; 
return !!cache && jQuery.isEmptyObject( cache );
```

which has no additional cost since both the old and new implementations both have a single property access in them.