Expose mechanism whereby bytecode enhancement can be run *before* saving incremental compiler hashes.

Splits the compile task into three components:

1. readAnalysis
2. compileIncremental
3. saveAnalysis


Byte code enhancers can inject themselves into 2, although we may want to directly expose an API for bytecode enhancers in the future.


Additionally, this PR attempts to clean up some names throughout the incremental compiler (and add toString for debugging).   Please open the bikeshed arguments on naming, as I'd like to isolate what these components should be called.


Review by @gkossakowski and @eed3si9n cc> @jroper 
This is copy-pasted. I just tried to document what it does.   Think of it as separation of concerns, as the implementation is pretty big of the actual compile method.