Use a listener for request/response responses instead of #receive.

In a cluster, HornetQ won't send messages to nodes that don't have an
active consumer. If we use #receive to get the result of a synchronous
call, *and* the responder for that call is on another node, *and* that
responder completes before #receive is called on the requesting node,
then the message will never be delivered to the requesting node, since
no matching consumer exists.

This fixes that by using a listener (one per queue) that we create if
needed on the request call. This listener then acts as a router and
routes results to the appropriate Future for the particular request
call.
Add copyright header.
These constants really belong on the message class.