Use ReadWriteLock rather than synchronization

Access to CachingRegistry will typically be very read heavy with few,
if any, writes occurring after initial setup has been completed.
Therefore, it's a good candidate for using a ReadWriteLock, which
allows parallel reads, in place of standard synchronization which does
not.
Merge pull request #6 from wilkinsona/cache-registry-rwl

Use ReadWriteLock rather than synchronization