Add the ability to use a callback.
Update to use call_user_func()
We should check that the callback is passed in the constructor.
Added tests for checking the callback, and allowing the ability to unset the callback.