Major changes to PersistentDict:
This change also implements WriteOncePersistentDict, which has a write-once policy. WriteOncePersistentDict uses a writer lock but allows for unlocked reads, which makes reads from disk faster. It also uses an in-memory LRU cache to speed up accesses.
To use the cache, you supply a in_mem_cache_size parameter.
Both classes are backwards compatible with existing persistent dict directory structures.
This change requires a version bump.