This is utility class to make easier to deal with situation
when API is not using classes that are thrown by implementation
hidden behind dynamic proxies - in such case suer will be getting
Returns object implementing the same set of interface as wrapped object
but with additional ability to catch all exception of wrapped object
and wrap them into one target exception (provided as parameter)
and it will take care of UndeclaredThrowableException if wrapped object is
dynamic proxy and it generates undeclared exception.