Destroy magic methods

We want to avoid using `__call()` and also want to be able to hint `Interface` using `CacheInterface`. This PR enables this functionality and gets rid of the magic method.

Also added some unit tests for these new methods.