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.

Nop. `isset` is faster [0, 1] than `array_key_exists` and `array_key_exists` is only used so we fetch the `null`.

Apparently [2] knows the same trick. 

[0] http://ilia.ws/archives/247-Performance-Analysis-of-isset-vs-array_key_exists.html
[1] http://php.net/manual/en/function.array-key-exists.php#82867
[2] https://github.com/doctrine/cache/blob/master/lib/Doctrine/Common/Cache/ArrayCache.php#L53