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.
Validating that the required fields are present in the build method makes a lot of sense to me too.

The problem is that I couldn't decide though on a good exception that I could throw when the outputDirectory is missing and then catch in the main method to communicate to the user that they need to provide an output directory. It seemed like overkill to extend WireCompilerException for the missing outputDirectory case. Maybe it's not overkill? It's a similar problem with a missing protoPath.