Change cache mutex to sync.RWMutex

A small tweak to the cache mutex that could help performance quite a bit in certain scenarios. Multiple reads to the cache don't need to exclude each other. Let the lock be held by an arbitrary number of readers or a single writer. Now once the cache is fully primed, there won't be any blocking.