Move more stuff out of ReactComponent

Here's a bunch of stuff that doesn't belong in ReactComponent anymore. See individual commits.

I also added a preventExtensions for internals in `__DEV__`. This ensures that we don't add state that we don't know about and ensures that the components keep a stable type signature.