first pass at an events DSL