Any duplicates or conflicts should be resolved automatically, at least when using Maven.
The neo4j-cypher-compiler-* modules are special -- they add support for the syntax from previous versions and are not duplicates.
org.neo4j:neo4j:jar:2.1.5
+- org.neo4j:neo4j-kernel:jar:2.1.5:compile
| +- org.neo4j:neo4j-primitive-collections:jar:2.1.5:compile
| \- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile
+- org.neo4j:neo4j-lucene-index:jar:2.1.5:compile
| \- org.apache.lucene:lucene-core:jar:3.6.2:compile
+- org.neo4j:neo4j-graph-algo:jar:2.1.5:compile
+- org.neo4j:neo4j-udc:jar:2.1.5:compile
+- org.neo4j:neo4j-graph-matching:jar:2.1.5:compile
+- org.neo4j:neo4j-cypher:jar:2.1.5:compile
| +- org.neo4j:neo4j-cypher-commons:jar:2.1.5:compile
| +- org.neo4j:neo4j-cypher-compiler-1.9:jar:2.0.3:compile
| +- org.neo4j:neo4j-cypher-compiler-2.0:jar:2.0.3:compile
| | +- org.parboiled:parboiled-scala_2.10:jar:1.1.6:compile
| | | \- org.parboiled:parboiled-core:jar:1.1.6:compile
| | \- net.sf.opencsv:opencsv:jar:2.0:compile
| +- org.neo4j:neo4j-cypher-compiler-2.1:jar:2.1.5:compile
| +- com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.3.1:compile
| \- org.scala-lang:scala-library:jar:2.10.4:compile
+- org.neo4j:neo4j-jmx:jar:2.1.5:compile
\- com.sun.tools:tools:jar:1.7:system
I don't know if the additional cypher-compiler libs could be made optional, I've never looked into how they are loaded.