AMQP-230: DirectExchange: Allow Omit `key` Attr

JIRA: https://jira.springsource.org/browse/AMQP-230

Previously, the `key` attribute for a `direct-exchange` `binding` could be omitted,
but that meant that the binding used an empty `routingKey`.
With this change an empty `routingKey` requires `key=""`.
Omitting the `key` means that the binding will use the name of the provided `Queue` or `Exchange`
for the routing key.

AMQP-230: Move routingKey logic to DEParser

AMQP-230: routingKey resolution using SpEL

AMQP-230 Polishing

Author tag; what's new.
AMQP-72: Add AmqpTemplate#receiveAndReply methods

JIRA: https://jira.springsource.org/browse/AMQP-72
AMQP-72: PR Comments and others

* rename all methods to `receiveAndReply`
* Return `boolean` flag from `receiveAndReply`: was message received or not
* Add methods with `ReplyToAddressCallback`
* JavaDocs & Reference Manual
AMQP-72: wrap receiveAndReply with doInRabbit

* Add transactional tests
AMQP-72: Fix doReceiveAndReply channel.txCommit()
AMQP-72: Add correlationId to replyMessage
AMQP-72: Use `correlationKey` for receiveAndReply
AMQP-72: Correlation and Docs Polishing

Add `catch (ClassCastException e)` for `callback.handle()`