Lightweight C++ event library