AMQP-388 Issue basicCancel from container on stop

JIRA: https://jira.spring.io/browse/AMQP-388

Previously the `SimpleMessageListenerContainer` postponed the real `BlockingQueueConsumer.stop`
with some artificial `quiesce` timeout to block receive thread with `CountDownLatch` until `BlockingQueueConsumer.stop()` will be invoked.

Change `quiesce` timeout to the real `basicCancel` from all `Consumer.stop` cases.
Postpone `SimpleMessageListenerContainer.this.cancellationLock.release(this.consumer);`  in the `AsyncMessageProcessingConsumer` until there are messages
to deliver in the internal queue of the `BlockingQueueConsumer`.
AMQP-407 Redeclare AMQP Objects if Missing

JIRA: https://jira.spring.io/browse/AMQP-407

Previously the `SimpleMessageListenerContainer` redeclared AMQP objects for a new `Consumer`, only
if one of `Queues` was `autoDelete`.
Since `Queues` might be removed from the Broker according to the server TTL policy, there is a need to take care of their redeclaration as well.

Fix `BlockingQueueConsumer` to `catch (AlreadyClosedException e)` on the `channel.basicCancel(consumerTag)` operation:
https://build.spring.io/browse/AMQP-NITEALL-373

Tested with `gradlew clean testAll`

AMQP-407: Add `auto-declare` to ListenerContainer

Fix `SimpleMessageListenerContainer` do not start a new `Consumer` when `continuable` but not `isActive(this.consumer)`. It happens when we stop Container, but Consumers have delivery in the internal queue.

Fix some tests to stop Container in the end.

AMQP-407: Fix `ListenFromAutoDeleteQueueTests#testAutoDeclareFalse`

...to stop Container in the end of test method.
It allows to overcome the issues with hanged `MessageListenerContainerLifecycleIntegrationTests`.

However it doesn't help to understand the root of cause: when the Deal Lock is...

AMQP-407: Avoid `Main Loop` from Mock Consumer

Doc Polishing
AMQP-273: mandatoryExpression for RabbitTemplate

JIRA: https://jira.spring.io/browse/AMQP-273

Polishing
AMQP-425 Add @RabbitListener Documentation

Also RabbitMessagingTemplate reference.

Doc Polishing.
AMQP-422 PublisherCallbackChannel: Postpone Close

JIRA: https://jira.spring.io/browse/AMQP-422

Add `stopSemaphore` and `closeTimeout` option to the `PublisherCallbackChannelImpl`
to postpone physical `close` until timeout or handlong for all pending confirms

Decrease `@Repeat` for `RabbitTemplatePerformanceIntegrationTests` for better build performance

AMQP-422: Rework `stop` logic to the scheduling

AMQP-422: use `waitForConfirmsOrDie` from CCF

* Revert all changes to the `PublisherCallbackChannelImpl` class (leave just code style polishing)
* Add to the `CachingConnectionFactory.CachedChannelInvocationHandler.physicalClose()` to postpone
`Channel.close()` `if(publisherConfirms)` and use `waitForConfirmsOrDie` in that separate `Thread`
* Add a couple of test to demonstrate new logic
* in case of just `publisherReturns` `Channel` is closed normally as it is now

AMQP-422: Add `active` check to the async close logic

AMQP-422: NPE fix and `catch` logic

AMQP-422: Accept stop schedule for `publisherReturns` too

Change wait timeout to 5 seconds

AMQP-422: Use `Thread.sleep(5000);` for `publisherReturns`

Polishing
AMQP-429: Change `@SendTo` Logic to `Address`

JIRA: https://jira.spring.io/browse/AMQP-429

Since `@SendTo` can apply only `String` values, but from other side `Address` can parse that `String`,
there is no stops to use `Address` object as a `replyToAddress`.
Now to send a result of `@RabbitListener` method to some specific `replyTo` you can specify it like this:
```
@RabbitListener(queues = "test.sendTo")
@SendTo("direct:///test.sendTo.reply")
public String capitalizeAndSendTo(String foo) {
	return foo.toUpperCase();
}
```

* Add integration test
* In addition remove redundant `@RabbitListener.responseRoutingKey()`

AMQP-429: Revert a legacy code

Note: `@SendTo("")` is a valid use case, when we just want to send message to the Default Exchange with default `routingKey`.
Hence fix `MethodRabbitListenerEndpointTests#emptySendTo()` to expect valid result instead of `Exception`
Fix `Address` to treat empty String as `null`

AMQP-429: Pushed the change for empty `@SendTo`

AMQP-429: Fix `Address` overhead with `ExchangeType`

* Provide new `Address` algorithm to parse String argument
* Fix tests
* Add note to Docs regarding `@SendTo`

AMQP-429: Provide backward compatibility for `Address`

Remove redundant test for `returns`

Polishing
AMQP-406: Add RoutingCF to the RabbitTemplate

JIRA: https://jira.spring.io/browse/AMQP-406

* Add support of `connection-factory-selector-expression` for the `RabbitTemplate`
and provide logic to bind target `ConnectionFactory` to the invocation context based on the result of the expression evaluation.

AMQP-406: Fix double ThreadLocal resource

Polishing

AMQP-406: introduce `receiveConnectionFactorySelectorExpression`

Doc Polishing
AMQP-428: Add Logback `AmqpAppender`

JIRA: https://jira.spring.io/browse/AMQP-433, https://jira.spring.io/browse/AMQP-428

Fix `amqp.rabbit.log4j.AmqpAppender` JavaDoc typo

Polishing

Add category abbreviation [o.s.a.r.l.AmqpAppenderIntegrationTests].

Retain full category in AMQP headers.
AMQP-432: Properly convert BasicProperties values to and from
MessageProperties

JIRA: https://jira.spring.io/browse/AMQP-432

Previously `DefaultMessagePropertiesConverter` converted just
`LongString`,
but BasicProperties may contain List and Map values with nested
LongStrings. Values unsupported by AMQP which are contained in Lists or
Maps are also not converted from `MessageProperties` to
`BasicProperties`.

Add logic to properly convert from LongString values nested in
Lists/Maps.
Add logic to properly convert unsupported values nested in Lists/Maps to
Strings.

**Cherry-pick to 1.3.x**

Code style polishing