User can now add custom solver monitor functions

To calculate diagnostics or output custom quantities, a user
can specify a function which will be called every output timestep
(as opposed to internal timestep like physics_run).

Details in the user manual, and toy code in examples/monitor