Use exclusions to remove duplicate dependencies

A number of projects had duplicate dependencies on their classpaths as a result of the same classes being available in more than one artifact, each with different Maven coordinates. Typically this only affected the tests, but meant that the actual classes that were loaded was somewhat unpredictable and had the potential to vary between an IDE and the command line depending on the order in which the aritfacts appeared on the classpath. This commit adds a number of exclusions to remove such duplicates.

In addition to the new exclusions, notable other changes are:

 - Spring Data JPA has been updated to 1.4.1. This brings its transitive dependency upon spring-data-commons into line with Spring LDAP's and prevents both spring-data-commons-core and spring-data-commons from being on the classpath
 - All Servlet API dependencies have been updated to use the official
   artifact with all transitive dependencies on unofficial servlet API
   artifacts being excluded.
 - In places, groovy has been replaced with groovy-all. This removes
   some duplicates caused by groovy's transitive dependencies.
 - JUnit has been updated to 4.11 which brings its transitive Hamcrest
   dependency into line with other components.

There appears to be a bug in Gradle which means that some exclusions applied to an artifact do not work reliably. To work around this problem it has been necessary to apply some exclusions at the configuration level