Added support for Publisher Acknowledgements in Spring AMQP Terminal

Publisher acknowledgements are a RabbitMQ specific feature that allows for
publishers to receive an ACK of each sent message, without the need for
transactions. Although there are less guarantees than with transactions the
performance is said to be 100x times better.

Issue #AXON-113 Fixed
Added support to explicitly configure payload type on @EventHandler

By explicitly adding the expected payload, handlers can remove the first
parameter in cases where only the Message or certain MetaData fields are
required.

Issue #AXON-62 Fixed
Merge remote-tracking branch 'markdingram/master'

Issue #AXON-114 Fixed
Improved test coverage for illegal state change detection

Added a test that checks for recognition of deleted aggregates where the
markDeleted is invoked in outside the EventHandler method.
Added logic to remove ParameterResolverFactories at runtime

This allows certain factories to only work within a limited scope of the
application's lifetime. This is especially useful when executing tests using
the test fixtures; resolvers should only be considered during the execution of
each specific fixture.

To ensure that cached handlers are invalidated, components that cache results
of ParameterResolverFactory should register a change listener. When a change is
detected, the cache must be cleared to ensure re-evaluation of all annotated
methods. It is unlikely to happen during Runtime, so the performance impact is
minimal.

Issue #AXON-100 Fixed
Preventing duplicate snapshots

Enhanced snapshotter to refrain from making a snapshot if only a single event
was needed to recreate the snapshot's state. This could result in duplicate key
violations in the Event Store.

Issue #AXON-120 Fixed
Fixed unit tests
fix AXON-121: detect usage of duplicate aggregateId
Minor modifications on previous commit
- Thrown exception should be ConflictingModificationException

Issue #AXON-121 Fixed
Added check to ensure provided Executor is suitable for AsyncSagaManager

The AsyncSagaManager checks whether the given executor actually starts the
requested processors. If they don't start within a specific timespan, an
exception is thrown. This detects the situation where the core pool size of a
thread pool is not large enough to accomodate all the processors.

Issue #AXON-125 Fixed
Added the CommandGateway as default resources in the Saga Test Fixture

The CommandGateway (or the mechanism that allows the creation of a gateway
using your own interface) is the recommended way to interact with a Command
Bus. Therefore, the CommandGateway is available as a default resource in the
test fixture.

Issue #AXON-112 Fixed
Annotation...HandlerPostProcessor should not process beans twice

When two AnnotationCommand/EventHandlerPostProcessor instances were configured,
the second one would cause an exception, as it was unable to enhance an already
enhanced bean with the same interfaces.

Issue #AXON-119 Fixed
Added some tests for AXON-128
Forgot a file in previous commit
Improved documentation on @CommandHandler parameters

The documentation did not mention the ability to use ParameterResolvers that
allow e.g. Spring beans to be passed as parameters.

Issue #AXON-127 Fixed
SagaTestFixture will now do shallow field comparison on Commands

Commands do not always implement an equals method. Yet, the fixture should
not really be influenced by that. Now, when a fixture compares commands, it
will first check for equality using equals. If that is false, the fields are
checked using their equals method.

Issue #AXON-111 Fixed
Tests seemed to influencing eachother
Add attribute prefix to attributes

Attribute prefix was not being added to attributes, causing an assertion
to fail when using the serialiser to create snapshots.
Annotations on interface methods are also inspected

The @CommandHandler and @EventHandler annotations may now also be places on an
interface implemented by the handler. Methods on the interface are evaluated
after the methods declared on the class implementing the interface, but before
the methods on the class' superclass. So if class A extends B and implements C,
the order in which methods are inspected is A, C, B.

Issue #AXON-136 Fixed
AXON-133 Expose the underlying EventStoreManagement.newCriteriaBuilder() and make it possible to start a replay with a Criteria.