Problems with cache providers

1. The local cache provider returns the same object on all get operations. As a result, modification of any object returned from such a cache modify all other objects returned for the same key, and modify the object in a cache itself. It is true for nontrivial objects.
2. multi-level cache provider behaviour is incorrect.

* PHPdoc comments are added
* LocalMemory provider is patched to clone objects in Get/Set operations to prevent same object sharing and modifying.
* QMultiLevelCacheProvider is patched to work properly.
* CreateKey function is adopted to work with older php versions

The #266 issue is addressed here.