Implement activemodel style callbacks

[fixes #146]