Exercise objects in the database module, along with their test cases, now have delete() methods, which allow for 'safe' removal. Calling this method will only delete an exercise if it has no saves or attempts associated with it.
Updated ExerciseDeleteView to make use of this new functionality.
Updated ExerciseDeleteView, and its template, to be clearer in their control flow.