Add InMemoryCache using LRU to replace out of range/least used cache it...

Relates to #555

`SMWSql3SmwIds` handles cache limits and generates id's while using "Random Replacement" as a method (which is less appropriate) to discard cache items.
Why no getters? Guess you don't want outside code to write to this