Guard setState with isMounted

Firing two actions close together, where one action changes state for a watched store, and the other action results in the removal of the watching component from the DOM, can produce "Error: Invariant Violation: replaceState(...): Can only update a mounted or mounting component." from React.  The setState call therefore needs to be guarded even though componentWillUnmount removes the listener.

Signed-off-by: Brandon Tilley <brandon@brandontilley.com>
ensure that test fails React's Invariant Violation if components are swapped out from under the root; also lots of miscellaneous surgery to avoid jsdom's Wrong Document.

Signed-off-by: Brandon Tilley <brandon@brandontilley.com>