convert hooks into soft hooks

This implements soft hooks in a very aggressive destructive way.

cc @Matt-Esch 
Its not preferable to implement recursive stateful hooks.

Its preferable to keep soft hooks shallow & simple.