Error Handling Improvements

## Error Handling Improvements

- Addition of server-side (C#) Airbrake error reporting to complement existing client-side (JS) Airbrake reporting.
- Distinguishing JS errors from C# errors in Airbrake by appending " (JS)" to environment entries so can distinguish between both in filters.
- New AppKey toggle to enable/disable client-side Airbrake reporting. Useful as service had a recent outage. (See <http://status.airbrake.io/>.)
- New AppKey toggle to enable/disable server-side Airbrake reporting. Useful as service had a recent outage. (See <http://status.airbrake.io/>.)
- New friendly generic error page created and wired up for uncaught server-side errors. Can view directly at /error.html to see what looks like.
- Web.config changes so developers on same local box see real error, and everyone else (real users) see the generic error page.

The generic error page is a better choice for end-users since it:

1. Hides the real server-side error, which can otherwise be examined and exploited by hackers and malicious crawlers.
2. Is a friendlier experience with some options for next steps, and is more intelligible for the end-user than a technical error.

## AppKey Configuration Changes

- New key "Airbrake.TrackServer" can be set to true/false to indicate if we want to use Airbrake to track server-side C# errors.
- New key "Airbrake.TrackClient" can be set to true/false to indicate if we want to use Airbrake to track client-side JS errors.
- New key "Airbrake.ProjectId"   replaces old key "AirbrakeProjectId".       Existing values should be migrated.
- New key "Airbrake.ApiKey"      replaces old key "AirbrakeProjectKey".      Existing values should be migrated.
- New key "Airbrake.Environment" replaces old key "AirbrakeEnvironmentName". Existing values should be migrated.