Iri cache synchronisation

WeakCache contains race conditions if multiple threads access it concurrently. These issues are displayed, for me at least, using IRITest, before applying the second part of the patch, by tests that do not complete within 60 seconds, and presumably would never complete. 

IRITest.testIRIStringSerialNoCacheUse passes with or without the change, but the other three tests all fail, including testIRIStringConcurrentNoCacheUse that theoretically should behave like testIRIStringSerialNoCacheUse if there was no concurrency issue.

After adding Collections.sychronizedMap inside of WeakCache, the tests complete in a similar time for both cache usage and non-cache usage.