Use feature detection and more robust recovering of whitespace for innerHTML in IE8

`dangerouslySetInnerHTML` in IE8 collapses whitespace in **root TextNodes** and removes leading whitespace. Your current fix for this is to replace any first space with `&nbsp;` which is a surprisingly good and simple fix, but it does this for all browsers and doesn't solve the collapsing whitespace (or any whitespace besides space).

I propose the following fix instead, which makes it work identically to all other browsers at minimal cost, and does so via feature detection so only IE8 is affected.

PS. Make sure to spot the seriously magic trick I discovered to making IE8 behave better!

```
   raw     gz Compared to master @ 09bdcefd4f246eb49b82aa5bfece8d40cb8a2fca
     =      = build/JSXTransformer.js
 +3155   +642 build/react-test.js
  +658   +217 build/react-with-addons.js
  +169    +74 build/react-with-addons.min.js
  +658   +214 build/react.js
  +169    +91 build/react.min.js
```

*Disclaimer: if the root node is a TABLE/TBODY/OL/SELECT or anything else that (kind of) doesn't support TextNodes AND there is whitespace in the beginning of the HTML, this will create a faulty TextNode with whitespace (when it actually should be removed)... however, the code/size penalty for solving this is unreasonably large when the use-cases are virtually none, as far as I'm aware*