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.