Port the PersistentSymbolTable to LockedItemRepository::op
This is seemingly less obvious, but thankfully actually totally fine. I was first very surprised by how the code used the same request to insert a new changed item, but that relied on the reference-holding semantics of the request. To make this more clear, get rid of the requests and operate on items directly. Then remove the external mutex locking and only lock the item repo mutex when needed via the LockedItemRepository::op. We also need a separate mutex to ensure the caches are properly protected, because they are accessed outside the repository ops. In general, I think this whole class needs a cleanup, but that will have to wait for a future time.