  [1714]: https://github.com/sbt/sbt/issues/1714


### Fixes with compatibility implications

### Improvements

### Bytecode Enhancers

sbt 0.13.8 adds an extension point whereby users can effectively manipulate java bytecode (.class files) BEFORE the
incremental compiler attempts to cache the classfile hashes.  This allows libraries like ebean to function with sbt
without corrupting the compiler cache and rerunning compile every few seconds.

This splits the compile task into several subTasks:

1. `previousCompile`:  This task returns the previously persisted `Analysis` object for this project.
2. `compileIncremental`: This is the core logic of compiling Scala/Java files together.   This task actually does the
    work of compiling a project incrementally, including ensuring a minimum number of source files are compiled.
    After this method, all .class files that would be generated by scalac + javac will be available.
3. `manipulateByteCode`: This is a stub task which takes the `compileIncremental` result and returns it.
    Plugins which need to manipulate bytecode are expected to override this task with their own implementation, ensuring
    to call the previous behavior.
4. `compile`:  This task depends on `manipulateBytecode` and then persists the `Analysis` object containing all
    incremental compiler information.

Here's an example of how to hook the new `manipulateBytecode` key in your own plugin:

    manipulateBytecode in Compile := {
      val previous = (manipulateBytecode in Compile).value
      doManipulateBytecode(previous)  // Note: This must return a new Compiler.CompileResult with our changes.
    }

See [#1714][1714] for the full details of the implementation.

### Bug fixes

Add missing notes for enhance bytecode feature.
Add missing notes for enhance bytecode feature.
