added basic event system with basic tests