Add Event types

Close #30. Close #34. Close #35. Close #36. Close #38. Close #39. Close #47. Close #48. Add event types. Update events to work with event types. Add tests for event types. Update event tests.
@D-Land can you provide some more info here? This is the last issue preventing this PR from being merged.