each compilation group gets an Analysis
an sbt-style project could have multiple compilation groups or there could be multiple projects per compilation group.
Traditionally, there has been a main group and a test group.

Each Analysis is associated with one or more classpath entries.  Typically, it will be associated with the output directory and/or any artifacts produced from that output directory.

For Java sources, need to write a (File, Set[File]) => Source function that reads an API from a class file.  The compile function passed to IncrementalCompile needs to handle compiling Java sources in the proper order

Need to handle entries removed from classpath.  Could be done similarly to how Locate is used for getting the API for a dependency.  In this case, we'd get the Stamp for a binary dependency.

Post-analysis
  - need to handle inherited definitions

Need builder component:
  Processor[D]
    def process(command: String, arg: String, current: State[D]): Result[State[D]]
  Initial[D]
    def init: State[D]
  State[D]
    value: D
    processors: Map[String, Processor[D]]