HQ1104 STOMP 1.2 support

Implementation of STOMP version 1.2 support in HornetQ

Here is the STOMP V1.2 spec.
http://stomp.github.com/stomp-specification-1.2.html

STOMP v1.2 doesn't have much difference from v1.1. So it could be easily added to HornetQ based on the current code base with the following changes:

1. Refactor existing STOMP 1.0/1.1 code to improve code reusability.
2. Add the few new features mainly stated in the spec (see section 'Changes in the Protocol').
3. add an simple example
4. document update
5. tests

Below are details of general Stomp request processing

All incoming/outgoing bytes from/to a stomp client are processed by StompProtocolManager class. The StompProtocolManager creates a StompConnection for each client connection request.

Stomp version for each connection is determined during connection time, and so is the authentication.

Once connected, a StompConnection has a VersionedStompFrameHandler initiated. The VersionedStompFrameHandler has mainly two tasks:

task 1 : it uses a version specific decoder to decode stomp bytes into StompFrames
task 2 : it processes the decoded StompFrames and sends responses to client if needed.

Here is a summary of the VersionedStompFrameHandlers/decoders for each version

Stomp 1.0: StompFrameHandlerV10/StompDecoder
Stomp 1.1: StompFrameHandlerV11/StompDecoderV11
Stomp 1.2: StompFrameHandlerV12/StompDecoderV12

Here classes of higher versions usually inherits those of lower versions to maximize code reuse.

Message requests are converted into HornetQ core semantics and actually processed by the core layer.  Internally we have a StompSession to wrap a core session to do the work. It can be shown briefly using the following flow:

=(incoming bytes)==>StompProtocolManager==>StompConnection==>StompDecoder == (Stomp frames) ==> FrameHandler ==>StompSession ==> Core

Messages are sent to client in the following flow:

Core ==(core message)==>StompSession==>FrameHandler==(stomp frames)==>StompProtocolManager==>StompConnection===(physical network)==>client

Testing

We have a simple testing client to simulate STOMP clients. Related tests are in the following classes:

StompTest
ExtraStompTest
StompV11Test
StomeV12Test
Merge pull request #891 from gaohoward/br_STOMP12_HQ1104

HQ1104 STOMP 1.2 support
A few doc related updates
Merge pull request #894 from jbertram/master

Doc updates
I added a new test to check null values.
Merge pull request #895 from diegolovison/master

I added a new test to check null value.
Fix typo in method name.
Rename method to an accurate name ('close' is misleading)
HORNETQ-1128 Improve schema documentation, add some intra-manual links
Add description to assertion in test.
HORNETQ-1148 Bump the version to fail properly if server is older:
Connecting from a 2.3-client (now, version 123) to a 2.2 server will fail due
to serialization errors. Better a `version incompatibility` error.
First close all sessions, THEN start waiting for completion.
Remove the setContext call, from server.stop() as the methods inside
ServerSession are already handling the context switching.

Also make the sessionContext 'final', it simplifies the code and we
can assume more about it
Merge pull request #898 from FranciscoBorges/stop-server-sessions

First close all sessions, THEN start waiting for completion.
Merge pull request #897 from FranciscoBorges/version-hq-1148

HORNETQ-1148 Bump the version to fail properly if server is older:
Merge pull request #896 from FranciscoBorges/schema

HORNETQ-1128 Improve schema documentation, add some intra-manual links
Make synchronization of "started" field consistent.
Merge pull request #899 from FranciscoBorges/smallFixes

Make synchronization of "started" field consistent.
hq1114