[RFC] Per React container event listening/dispatching

Work in progress. `enterleave` plugin (and maybe `analyticsPlugin`) is broken because it relied on the old behavior. But wanted to put this out here for suggestions. There are also some comments that need to be changed, I'll do it when the code is finalized.

If we attach the event listening/dispatching at container level, it'll benefit the case of `<Editor/><Plugin1/>` (both are container roots), since `Plugin1` won't disturb `Editor`.

We also detach those listeners now. There wasn't really a need in the past.

@spicyj @zpao @nathansobo

Fixes #2043
Should help with #1964
I'm curious why there is a need to store an object on the DOM node, why not use an internal object indexed by the React ID instead?