Made InMemoryReadModelPersistence thread safe

Normally all event processors will handle sequentially. However when two
threads are attempting to apply the same event, a race condition might
occur.

Also, as the internal dictionary is updated asynchronously reads are not
consistent and might throw ConcurrentModificationExceptions which is
unexpected by client code.
Minor changes and comments