Add smart logging for disconnected SockJS clients

The Servlet API does not provide notifications when a client
disconnects, see see https://java.net/jira/browse/SERVLET_SPEC-44.
Therefore network IO failures may occur simply because a client has
gone away. Before this change that could fill logs with unnecessary
stack traces.

After this change we make a best effort to identify such network
failures, on a per-server basis (tested with Jetty, Tomcat, Glassfish,
and WildFly), and log them under a separate log category.

A simple one-line message is logged at DEBUG level (i.e. no stack trace)
while a full stack trace is shown at TRACE level.

Issue: SPR-11438
Polish AbstractSockJsSession
Clarify exception handling in converter

Issue: SPR-11500
Update reference documentation for SPR-11486

Issue: SPR-11486
Outdated code example correction in section 10.3.6
Merge pull request #476 from platan/master

Update MockRestServiceServer example in reference manual
Aggregate JUnit and TestNG test reports

Prior to this commit, the test results for JUnit tests overwrote the
results for TestNG tests in the HTML test report generated by the
Gradle build.

This commit addresses this problem by introducing a new
'aggregateTestReports' task in the spring-test module and making the
'check' task depend on it.

To see aggregated reports in the spring-test module, execute either
`gradle build` or `gradle check`. Executing `gradle test` alone will
not trigger test report aggregation.

Issue: SPR-11509
AbstractApplicationEventMulticaster filters listeners against their type first, avoiding eager retrieval of listener instances for non-matching events

Issue: SPR-11501
Optimized DefaultResourceLoader's getResource implementation for "/..." paths, not relying on URL parsing exceptions for such a common case anymore

Issue: SPR-8283
Log4jWebConfigurer does not try to parse empty "log4jRefreshInterval" context-param

Issue: SPR-11507
Fix SimpleKey equality with array argument

Prior to this commit, an array argument was not handled properly in
SimpleKey#equals and SimpleKey#hashCode. As a result, two method
invocations with the same array argument lead to two different keys
and therefore two different entries in the cache.

This commit uses deepEquals and deepHashCode to properly handle
methods that have arguments that are array types.

Issue: SPR-11505
Merge pull request #477 from candrews/patch-1

* patch-1:
  Fix SimpleKey equality with array argument
Fix timing issue with obtaining async result

Issue: SPR-11516
Use unmodifiable set in AbstractSockJsSession
Clean up "abstract" test issues

 - Deleted empty AbstractWebSocketClientTests class.

 - AbstractServletHandlerMethodTests and AbstractHttpRequestTests are
   now actually declared as abstract.

 - The following classes are not abstract but currently have an
   "Abstract" prefix and therefore get ignored by the Gradle build.
   This commit renames each of these by deleting the "Abstract" prefix.

   - AbstractFlashMapManagerTests
   - AbstractMappingContentNegotiationStrategyTests
   - AbstractSockJsServiceTests
   - AbstractWebSocketHandlerRegistrationTests
instantiateUsingFactoryMethod avoids NPE and reports argument types in case of explicitArgs and resolved generic arguments as well

Issue: SPR-11517
Add tests for TransactionAwareCacheDecorator

This commit adds tests for TransactionAwareCacheDecorator. In
particular, the put/evict behaviour when the operation is invoked in
the course of Spring-managed transaction.
Merge pull request #462 from snicoll/cache-tx-tests

* cache-tx-tests:
  Add tests for TransactionAwareCacheDecorator
Adjust log level in LoggingWebSocketHandlerDecorator
KeyGenerators should not return a plain array parameter as raw key but rather always handle that case in a deepHashCode fashion

Issue: SPR-11505