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 not simple always do the later check? Micro optimization?