Polish cache abstraction code

Polish cache abstraction code and refactor CacheAspectSupport.
Allow @CachePut 'key' SpEL to refer to #result

Allow the @CachePut 'key' SpEL to refer to the result of the method call
via a '#result' variable.

This change is particularly useful when working with JPA entities that
have generated @Id values since the ID will often not be available
until the entity has been saved.

Issue: SPR-10664