Encapsulates (almost) all the ickiness of Scalac so it doesn't leak into
the rest of the codebase.

Encapsulates (almost) all the ickiness of Scalac so it doesn't leak into
the rest of the codebase. Makes use of a good amount of mutable state
for things like the log-output-forwarder or compiler-plugin-output because
These things are hard-coded into Scalac and can't be passed in from run to
run.

Turns source-strings into the bytes of classfiles, possibly more than one
classfile per source-string (e.g. inner classes, or lambdas). Also lets
you query source strings using an in-built presentation compiler

Deals with all the munging of Classloaders, Class[_] objects,
and Array[Byte]s representing class files, and reflection necessary
to take the already-compile Scala bytecode and execute it in our process.