convert hooks into soft hooks

This implements soft hooks in a very aggressive destructive way.

cc @Matt-Esch 
@Matt-Esch 

Unhooking event & count listeners would not work because it does not implement recursive destroy.

I do not plan to implement or need such a feature in the near term.

Let's implement recursive unhook when & if we need it. I don't want to add the performance overhead of it in this PR.