AMQP-312/372 Listener Container Queue Improvements

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

Support adding/removing queues at runtime.

Previously, the `SimpleMessageListenerContainer` had to be stopped
and restarted to change the queues on which it is listening.

`addQueueName()`, `addQueue()`, `removeQueueName()` and
`removeQueue()` methods are now available. In addition,
the `setQueueNames()` and `setQueues()` methods can be called
after initialization.

In each case, when the queues are changed, existing consumers
are recycled (cancelled and restarted) after any pre-fetched
messages are processed.

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

Previously, when a container is configured to listen to multiple
queues, the container would fail to start if any of its queues
were not available.

With this change, the container will start and listen to those
queues that are available, and attempt to consume from the missing
queues every 60 seconds.

In addition, if a consumer is cancelled (for example, if a queue
is deleted), the consumer will be recycled (cancelled and
restarted) and, again go into recovery mode where it will
attempt to consume from the deleted queue every 60 seconds.

AMQP-312/372 Polishing - PR Comments
AMQP-373 Support Listen on auto-delete Queues

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

Previously, listening on auto-delete queues was impractical
if the container is stopped/started. Stopping the container
causes the consumer to be cancelled, deleting the queue.

The RabbitAdmin only redeclares beans in the context when
the connection is lost. When stopping the container, the
connection is not closed.

Add code to the listener consumer startup to check if any
of it's queue names are declared in the context as
auto-delete queues and check that the queue exists.

If not, declare such queues with a RabbitAdmin.
AMQP-316 Support Exclusive Consumer

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

Allow the `SimpleMessageListenerContainer` to be configured
with an exlusive consumer; preventing other consumers from
accessing the queue(s).
AMQP-374 Test and Doc Example for Request Reply

With a RabbitTemplate wired with a fixed reply queue, using
JavaConfig.

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

Polishing
AMQP-374 Add BrokerRunning Rule to Test
AMQP-377: SMLC: Fix Consumers Map Race Condition

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

There is a case when container is empty (without queues)
and adding new queues and attempt to start container from cycle causes
the `ConcurrentModificationException` on `consumers` `Map` iteration,
when `queuesChanged` and `doStart` modify the Map.

Move `addAndStartConsumers` operation in the `queuesChanged()` outside from cycle to avoid the concurrent modification race condition

AMQP-377 Polishing; Fix Consumer Accounting

Add an integration test.

Fix a problem where too many consumers were started because the
`consumers` map still contained stale consumers that were in the
process of stopping.
Add Explict spring-context Dep. to spring-rabbit

spring-rabbit includes a number of classes with compile dependencies
upon spring-context, for example RabbitAdmin. It's currently only
getting spring-context transitively via its optional dependency on
spring-retry.

This causes a problem when spring-rabbit is depended upon as it can
lead to spring-retry's version of spring-context being used. This is
3.0.5.RELEASE which does not match the versions of the other spring
modules that spring-rabbit directly depends upon.

This commit adds a direct compile dependency upon spring-context
which better expresses the project's dependencies and ensures that a
matching and up-to-date version of spring-context is used.
AMQP-375 Doc Fixes

Incorrect references to `MessageListenerContainer`.

JIRA: https://jira.springsource.org/browse/AMQP-375
AMQP-378 Support Bulk Queue Changes

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

Consumers are restarted when queue changes are made.

Currently only one queue can be added/removed at a time.

Change the method args to varargs and make the method names
plural.

Deprecate the singular methods - we have at least one user
using this feature from the snapshot. The deprecated methods
can be removed in 1.3 GA.
AMQP-205 Retry Interceptor Builder API

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

Add builder API for stateless and stateful listener container
retry interceptors.

Add `RepublishMessageRecoverer`.

Docs and tests

AMQP-205 Polishing; PR Comments

AMQP-205 Final polishing

* Add `RepublishMessageRecoverer#setErrorRoutingKeyPrefix`
* Fix `RepublishMessageRecovererTest#shouldPublishToProvidedExchange`
* Fix `AbstractMessageListenerContainer` JavaDocs warning
* Fix a couple of typos
* Polish `RetryInterceptorBuilder` JavaDocs
* Add `private` constructors for `RetryInterceptorBuilder`s
AMQP-360 Update Versions; Align with SI/SF 4

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

Note: The changes to the RabbitBrokerAdmin test rules are simply
to make them work with junit 4.11 - these tests (controlled by
a System property) currently do no run and will be addressed by
a separate JIRA.

RabbitBrokerAdmin is not part of the main Spring-AMQP runtime.
AMQP-381 Add Retry to RabbitTemplate

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

Add support to configure a retry template on the
`RabbitTemplate`.

AMQP-381: Polishing `RabbitTemplate` warnings
AMQP-382 Update Rabbit Client to 3.2.4

JIRA: https://jira.springsource.org/browse/AMQP-382
[artifactory-release] Release version 1.3.0.RC1
[artifactory-release] Next development version
AMQP-383 Fix Auto-Delete Queue Redeclaration

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

When an auto-delete queue is removed by the broker, its
bindings are removed too. If the binding is the last one
for an auto-delete exchange, the exchange is deleted too.
If that exchange is bound to another exchange, its binding
is removed, etc, etc.

AMQP-373 only redeclares the queue and any upstream infrastructure
was not redeclared.

Added an integration test with an auto-delete exchange and queue.

Now, during container start, if an auto-delete queue is detected to
be missing, the entire `RabbitAdmin.initialize()` is invoked to
redeclare all context elements.
AMQP-383 Polishing - Conditional Declaration

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

The previous solution did not work for conditional declaration
queues because the internal `RabbitAdmin` was not in the list
of admins that should declare the element.

Add a setter for the `RabbitAdmin` and provide an attribute
in the namespace.

Add a test case for conditional declaration.

Add documentation, what's new.
Upgrade Jackson 2 to 2.3.2 version
AMQP-384 Fix Test

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

* `TestUtils.getPropertyValue()` (with type) NPE if the
    field is null
* When iterating over consumers to answer the consumeOk
    ignore consumers that don't have a channel yet
Fix Test Timing Problem