Cleaned up interface to observer: moved to a plain function interface
Removed accidential complexity from observer interface: now exactly a std::function can be passed in