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?

Nop, `isset` is faster [0] than `array_key_exists` (to be used to fetch null as well) and apparently [1] knows the same trick.

[0] http://php.net/manual/en/function.array-key-exists.php#82867
[1] https://github.com/doctrine/cache/blob/master/lib/Doctrine/Common/Cache/ArrayCache.php#L53