Make ReactComponent environment injectible

ReactEnvironment being a hard-coded alias to ReactComponentBrowserEnvironment
was a poor choice. We've made many other parts of our browser-centric pieces
injectible instead, so this simply does that.

I'm not totally happy with the way I did this. It took some easy ways out to avoid function calls. But we can have some getters and maybe make this a bit cleaner.