Ignore .springBeans
Polish SessionRepository javadoc

Clarifies that getSession updates expiration, but it must be saved for
the expiration to be persisted.
Disable onCommit after first commit

At times OnCommittedResponseWrapper#onResponseCommitted() can be invoked
multiple times. For example, when flush is performed multiple times. This
means that the session can be written multiple times which is inefficient.
Instead, we should only save on the first update.

Fixes gh-57
MapSessionTests tabs -> spaces
Add ExpiringSession.isExpired

Fixes gh-58
Add Support for background task cleanup of RedisSession

Redis key expiration has no guarantees of when the expired key is
actually removed. In some instances, it is necessary to clean up resources
as soon as the sessione expires. For example, when an HTTP Session expires
we must ensure that the associated Web Socket sessions are closed.

Sessions are now mapped to their expiration times and a background task
is used to clean up the sessions as they expire.

Fixes gh-59
Add SessionDestroyedEvent

Add support for SessionDestroyedEvent so that applications can detect
when a Spring Session has expired or explicitly deleted. This will
ensure that we can cleanup resources (i.e. WebSockets) can be cleaned up
when a Session ends.

Fixes gh-60
MapSessionRepository handles expried sessions

Fixes gh-31
Add WebSocket Support

Fixes gh-35