Fixes before_destroy ordering and association caching issues

This PR should fix issues #304 and #305 (and possibly others - not sure).

It turns out that `before_destroy` callbacks which refer to class methods are executed after all other callbacks, including the `dependent: :destroy` callbacks on composite model children.  This means that queries in the current model's `destroyanle?` method will return no children, sometime leading to confusion.

To correct this, `prepend: true` has been added to all `before_destroy` callbacks, and refreshed association calls (e.g., `ae.student_exercises(true).any?` have been added inside `destroyable?`-related model methods.