Event refactor

Just a thought...

(note: this depends on #145)
One thing that's a bit odd is that you pass in a const Base&, but then, the Add method will mutate it? It's all very separated by time, I'm not sure non-const makes sense either, but it seemed like a lesser contract to me, that's why I went with it.