refactore SPV::Element class and SPV::Applier to use chain for setting a custom event block