Handle fatal errors

We should decide how to handle various errors that prevent the app from starting or continuing. Right now these are handled in ad hoc ways such as throwing an Error, which crashes the app. Situations we need to handle include:

Can't open the database

Services fail to start

Out of disk space

Clock moves backwards

Database state is inconsistent (DbStateException)

This is a UX issue as much as a programming issue. How do we communicate these errors to the user and what do we advise them to do?