Allow jsx to write tags with bracket, instead of dot, notation.

This will allow for hyphenated tags in the future as something like
`React.DOM["font-face"](content, mountNode)`
instead of the invalid
`React.DOM.font-face.(content, mountNode)`
Many SVG tags have hyphenated tags so this would be a good thing to have.
Only use bracket notation if tag is invalid.

Also centralize validity logic in xjs.js.
Address @spicyj PR comments.
Merge branch 'hyphenated_tags' into svg_tags

Conflicts:
	vendor/fbtransform/transforms/react.js
More svg properties