Fixes #881 - Export component prototype methods on the HTMLElement

Here's a first pass. I kinda like the way this API feels -- it's important here that we're pretending the `can.Component` prototype is the `HTMLElement` prototype (with a couple of exceptions for other options).

See the test case for other/various little details about how this works.
It's very strange that going from [name] to .name would slow things down.  

I don't think you can put .__component directly on the element in IE8 without risking a lot of memory leaks.  It will almost certainly create a cycle if __component has any references (including function closures) to the element.  Cycles leak in IE8 even if nothing references the cycle.

I'm actually not sure if this is an IE8 problem or was fixed in IE7.  You might what to check.

An alternative would be to keep your own component instance map and avoid $.data altogether.

Btw, can `can.data` be passed a raw element?  Avoiding the `can.$` might save some time too.