Support java.util.Optional for @MVC named value args

After this change, java.util.Optional is supported with @RequestParam,
@RequestHeader, and @MatrixVariable arguments in Java 8. When Optional
is used the required flag is effectively ignored.

Issue: SPR-11829
Created SettableListenableFuture with tests

A SettableListenableFuture implementation of Spring's ListenableFuture
The class is inspired by Google Guava’s
com.google.common.util.concurrent.SettableFuture, but this
implementation uses ReentrantReadWriteLock and CountDownLatch
internally to handle thread synchronization.

Issue: SPR-11614
Revise SettableListenableFuture implementation

This change modifies the SettableListenableFuture implementation to use
internally a ListenableFutureTask created with a "settable" Callable.

Issue: SPR-11614
Merge pull request #504 from matsev/SPR-11614
Add suppress warning in SettableListenableFuture
Refactor PrefixResourceResolver into VersionResourceResolver

Prior to this commit, one of the available strategies for resolving
resources was the PrefixResourceResolver. Reconsidering the core goal of
this resolver and the FingerprintResourceResolver, we found that the
true core feature is versioning static resources application-wide.

This commit refactors both Resolvers by:
* adding a common Abstract Resolver for resolving resources based
on their version
* rename PrefixResourceResolver in VersionPrefixResourceResolver

One can add a VersionPrefixResourceResolver like this:

  List<ResourceResolver> resolvers = new ArrayList<ResourceResolver>();
  resolvers.add(new VersionPrefixResourceResolver("fooversion"));
  resolvers.add(new PathResourceResolver());

Issue: SPR-11871