Properly clean up player when calling MediaElementPlayer.remove()

Some features manipulate elements outside the player container
(including but not limited to attaching events to `document` and
`window`), which are not properly reversed when calling
`MediaElementPlayer.remove()`.

This commit does the following changes to enable easy cleanup:
- features can now specify cleanup routines, named 'clean' + feature
name;
- `mejs.players` is now a hash keyed by the players' IDs;
- new `MediaElementPlayer` methods: `globalBind()` and
`globalUnbind()`, which are simple wrappers to event (un)binding to
`document` and/or `window` that use the player ID as a namespace.
Don't spill vars to the global scope
Play nice with code outside MEP
Fix cleanup on the shim as well
_Any_ non-native media elements should be removed
Merge pull request #779 from odnamrataizem/master

Properly clean up player when calling MediaElementPlayer.remove()