Abstract over dependency kind in Analysis

Work in progress to make it easier to add new kinds of dependency.

Please see this discussion : https://groups.google.com/forum/#!topic/sbt-dev/clIbzCp9VX8
Both `AnalysisCallback` the class and `AnalysisCallback` the interface can be treated as sbt-private so you don't need to worry about deprecations and just refactor the code directly.