Apply Builder Pattern to WireCompiler.

The constructors on WireCompiler are hairy and have way too many parameters. This is causing multiple problems:
* It's not clear which argument maps to which parameter when instantiating WireCompiler instances.
* CheckStyle will fail as soon as another parameter is added (the limit is 10)
* There's no clear interface for invoking the compiler programmatically (i.e. https://github.com/square/wire/blob/master/wire-maven-plugin/src/main/java/com/squareup/wire/mojo/WireGenerateSourcesMojo.java#L93)

In my opinion, the builder pattern solves these issues.
This should be at the top under the fields and it should be package scoped. I'd make a static method `builder()` on `WireCompiler` directly which instantiates the builder with a real `IO` instance. This keeps the `IO` stuff as an implementation detail.