Cache: implement LRU cache

This PR holds structured backward compatible changes.
* Separated MemoryCache into 3 different caching system
** MemoryNoTS: provides a non-thread safe in-memory caching system
** Memory    : provides a thread safe in-memory caching system, built on top of MemoryNoTS cache
** MemoryTTL : provides a thread safe in-memory expring caching system,  built on top of MemoryNoTS cache

* Added LRUNoTS cache: provides a non thread safe, fixed size in-memory caching system, built on top of MemoryNoTS cache

* Added LRU cache: provides a thread safe, fixed size in-memory caching system, built on top of LRUNoTS cache

* Renamed all structs
* Added more tests and unified them.
what happens if `e` is nil ?