Better exception handling


There are many times than at unhandled exception gets exposed to a user. We need to catch and handle all exceptions so that users aren't exposed to them. In conjunction with doing this work, we shoudl also provide some kind of logging mechanism to log errors encountered. (being tracked by a separate work item: #3913)
Currently we have a global exception catch to stop users from seeing exceptions, however, this catch halts the application from running as well.