ISPN-1583 Avoid delegate advanced caches wrapped parameters

* Such parameters are flags or classloaders.
* By adding an interface that generates wrap objects, abstract delegate implementations can pass on caches with flags or cache loaders while keeping these wrapped.
* This avoid the problem of unwrapping a wrapper while keeping hold of the given flag/classloaders.