use React error boundaries to avoid blank pages upon unexpected errors
Created by: sqs
If a React component throws an error during rendering, previously the entire page would be blank. This commit introduces React error boundaries so that the error is confined and a nice(r) error page is displayed.
This is NOT intended to handle errors that can be anticipated. Components must do their own error handling. It is just a better worst-case when an error is not handled correctly.
fix #659