Add --quiet and --dry-run flags

Pants wants to know which .java files are going to be emitted from the compiler early in its build.

This change adds the ability to squelch the diagnostic output with --quiet
It also adds the ability to bypass generating code and just report the files it would create.

This change touches a lot of stuff, maybe more than it has to.  For example, I moved 'writer' to a function parameter instead of storing it in a field variable.  Let me know if you want me to land it as smaller changes or be less intrusive.
I *really* don't like this class. Why can't be dependency inject a logger like we do `IO`?