Initial implementation of issue #2112

This is a first pass at the implementation of issue #2112, posted primarily to get early feedback.  The change is not ready to be merged, though it shouldn't break anything.

TODO:
- [x] Read through the code to sanity check everything in this commit.
- [x] Verify the rerender logic will force an update when the context information changes.
- [x] Add unit tests to test the new functionality.
@zpao No time. We needed to avoid another merge-hell.

However, I missed that renderToString still accepts a context. It shouldn't. https://github.com/facebook/react/blob/89aaf73ae8802af3c83651a1b1db92bd48c2c156/src/browser/server/ReactServerRendering.js#L29