Change setInnerHTML to use createNodesFromMarkup

Related issue: #2273, fixes: #2249

`setInnerHTML` and `createNodesFromMarkup` are two separate solutions to solve (largely) the same problem. `createNodesFromMarkup` solves more edge-cases. This PR replaces the guts of `setInnerHTML` with `createNodesFromMarkup` instead.

- [x] Test plan: `grunt test`
- [ ] Make doubly-sure everything still works as it should in IE8