Refactoring and optimizing

Removed duplication of fields in concrete events, instead deferring to
event definition fields.
Extensive inlining throughout.
Clean separation of data and implementation.