Various fixes

Same here. Don't pass hooks in as arguments, instead have abase implementation that does nothing. Then call `self.on_send(..)` and `self.on_rev(..)`.