Let external objects observe individual timesteps in a simulation

When doing vertical upscaling I need to know when the state of the simulation has changed so I can recalculate hydrological ("fluid") properties. This is an attempt to enable this in a non-intrusive way (the alternative is to subclass the simulator; but we're not changing its behaviour!). Note that this adds a dependency on the boost::signals part of Boost.