Extract cascading deletes into the association classes.

Doing this allows each association to handle cascading deletes in their
own way. I think this makes the code cleaner, and allows userland
associations to participate in cascading deletes. In addition a new
trait has been extract to avoid inheritance/code duplication in
HasOne/HasMany.
Add unit tests for association classes & cascadeDelete.

In addition to the Table integration tests, these are helpful
to have as they test conditions in the associations.