Optimise compare events
Based off of !31 (merged) (so may need rebasing after that merges)
Moving ``state.get()` outside loop where possible (dpath seems slow with large data)
Also stop doing string search loop inside loop.
Part of https://gitlab.developers.cam.ac.uk/uis/devops/essm/administration/-/issues/48