add Hook.change_and_notify, improved cocumentation and tests