Use strings as the type for DOM elements

This makes ReactDOM a simple helper for creating ReactElements with the string tag as the type. The actual class is internal and created by instantiateReactComponent. Configurable using injection.

There's not a separate class for each tag. There's just a generic ReactDOMComponent which could take any tag name.

Invididual tags can be wrapped. When wrapping happens you can return the same tag again. If the wrapper returns the same string, then we fall back to the generic component. This avoids recursion in a single level wrapper.
I'm not a fan (I think) of `createDescriptor` having two distinct behaviors depending on whether it was a passed an object or a string. It seems to me that `createDOMDescriptor` seems preferable (for strings) and would then play nice with other non-DOM React frontends. But I also suspect you have a rather good reason for doing this :)