SnapshotFinder: Convert to visitor

The Maven API provides a visitor interface for traversing dependency
trees. This is used, for example, by the dependency:tree target.

As our custom, fully-recursive mechanism of traversal was prohibitively
slow, we have refactored to a new extensible visitor implementation that
runs an order of magnitude faster.

Note that there may be slight discrepencies in reported errors, as
dependencies are now resolved into a tree by maven instead of manually
searching dependency hierarchies.
Clean up pom.xml

The pom for this project is complicated by a dependency on both Maven 2
and Maven 3 artifacts.

We now exclude transitive dependencies to limit duplicate classes when
possible. In the cases of conflict between direct dependencies, the only
recourse is to add exclusions in the banDuplicateClasses enforcer rules
- which is now documented.