Respect 'key' prop for object identity

Now when a `key` prop appears, its value is always honored. This means that in the root component or as an only child, changing key will cause remounting; in a `children` object, the `key` prop will be joined with the object key to form a two-part key.

Fixes #590.
Make shouldUpdateReactComponent key logic clearer

...and inline getComponentKey into traverseAllChildren.js.
Extract out wrapUserProvidedKey for clarity
Use innerHTML not innerText in test
Merge pull request #591 from spicyj/mount-key

Respect 'key' prop for object identity