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.