Add `on_start` callback and make callbacks optional

* Add an `on_start` callback that gets triggered when a chore is about to run
* Register callbacks as no-ops if not present in the args