Add EventQueue and refactor router frontend to use client/cache

Doesn't this mean the consumer of the Deleted event receives a state (X) which was never processed (and which was thus never actually represented in the system)? When processing the delete, I'd expect to receive the state that's being deleted (what's actually in the system, not what we intended to process but never did).