Even better normalization of KeyboardEvent + MouseEvent

`KeyboardEvent` now normalizes `charCode`, `keyCode`, `which` across all browsers, partial `key`-support for KeyDown/KeyUp, full `key`-support for KeyPress. `getModifierState` is added to the interface of `KeyboardEvent`, `MouseEvent`  and `TouchEvent` and is polyfilled for IE8.

`TouchEvent` doesn't support `getModifierState` according to the latest draft, but considering that the interface is otherwise identical in the design, it would be exceptionally inconsistent for it to be intentionally omitted. `which` is redundant and not very precisely defined, but it is in the legacy standard. I also took the liberty to remove `char` from the interface, it existed briefly in the working draft before it got dropped. It was only ever supported by IE9, which makes it practically useless.

I've also extensively documented all the nuances.

```
   raw     gz Compared to master @ e91a8a1bc30e675c4683d5667b4122106962828b
     =      = build/JSXTransformer.js
 +3586   -904 build/react-test.js
 +4484  +1292 build/react-with-addons.js
  +839   +242 build/react-with-addons.min.js
 +4483  +1283 build/react.js
  +840   +218 build/react.min.js
```

Fixes #706.