Improve ConcurrentWebSocketSessionDecorator

Before this change the decorator ensured that for a specific WebSocket
session only one thread at a time can send a message. Other threads
attempting to send would have their messages buffered and each time
that occurs, a check is also made to see if the buffer limit has been
reached or the send time limit has been exceeded and if so the session
is closed.

This change adds further protection to ensure only one thread at a time
can perform the session limit checks and attempt to close the session.
Furthermore if the session has timed out and become unresponsive,
attempts to close it may block yet another thread. Taking this into
consideration this change also ensures that state associated with the
session is cleaned first before an attempt is made to close the session.

Issue: SPR-11450
Remove synchronized keywords from SockJsSession impls

Before this change SockJsSession implementations of WebSocketSession
used synchronization around its method implementations protecting
internal state and ensuring only a single thread is sending messages
at a time.

A WebSocketSession is generally expected to be used from one thread
at a time and now that application messages are sent through
ConcurrentWebSocketSessionDecorator, there is no concern about
application messages sent from the different threads.

While there are some remaining concerns, those can be addressed
without using the synchronized keyword. This change removes it from
the methods of all SockJS session implementations.

Issue: SPR-11450
Add CloseStatus to indicate unreliable session

When a send timeout is detected, the WebSocket session is now closed
with a custom close status that indicates so. This allows skipping
parts of the close logic that may cause further hanging.

Issue: SPR-11450
Polish
Adjust SockJS scheduler core pool size

Issue: SPR-11556
Disable SockJS heartbeat if STOMP heartbeat is on
Polish SockJS documentation
Document IE 8 and 9 related SockJS transport details

Issue: SPR-11496, SPR-11525
Document use of CORS headers in SockJS Service

Issue: SPR-11437
Document heartbeat support in SockJS
Merge pull request #494 from rstoyanchev/doc-sockjs

Expand SockJS documentation
MVC handler method detection ignores scoped targets in favor of proxies

Issue: SPR-11548
Introduced getFlashMapsMutex template method and optimized SessionFlashMapManager's locking

SessionFlashMapManager also clears the session attribute now when the given FlashMap List is empty.

Issue: SPR-11538
Added ASM-based tests for custom scoping annotations

Issue: SPR-11574
Upgraded to Tiles 3.0.3
ShallowEtagHeaderFilter use specified contentlength

Prior to this commit, the ShallowEtagHeaderFilter did not use the
content length given by the content generator to set the
ByteArrayOutputStream's buffer size.
This can lead to performance issues for large content since the buffer
grows as the content is being written.

This commit adds a new ByteArrayOutputStream variant called
ResizableByteArrayOutputStream. This implementation has public methods
for modifying the internal buffer size and does not synchronize on
buffer access.
This commit also make use of this new variant in
ShallowEtagHeaderFilter.

Issue: SPR-8271
Introduce Tiles version constants in Gradle build
Upgraded to AspectJ 1.8.0 RC2
Polishing
Add URI based MockHttpServletRequestBuilder constructors

This commit adds new MockHttpServletRequestBuilder constructors
with an URI parameter in addition to the URL template + URL variables
existing ones.

It gives more control on how the URL is built, allowing for example to
use URL variables containing '/' character with proper encoding.

Issue: SPR-11441