Add JSR-107 cache annotations support

This commit adds support for the JSR-107 cache annotations alongside
the Spring's cache annotations, that is @CacheResult, @CachePut,
@CacheRemove and @CacheRemoveAll as well as related annotations
@CacheDefaults, @CacheKey and @CacheValue.

Also support exception caching. If an exception is cached and should
be rethrown, it is cloned and the call stack is rewritten so that it
matches the calling thread each time. If the exception cannot be
cloned, the original exception is returned.

Internally, the interceptors uses Spring's caching abstraction by default
with an adapter layer when a JSR-107 component needs to be called.
This is the case for CacheResolver and CacheKeyGenerator.

Can be primarily used with Spring's CacheManager abstraction: no
JSR-107 Cache or CacheManager is required to use the standard
annotations.

Issue: SPR-9616