Add engine
Add header docs, generalize events for structs and classes
Merge branch 'feature/engine' into develop