Remote executor feature

This pull request will in the end have a RemoteExecutor which will be used like:
val exec = new RemoteExecutor("localhost:666", "some.jar")
exec.execute(myPlan)

(Also usable from Java and written in Java)

For now I just have some refactoring of how Client.run() works and of PactProgram, what do you think of these?

Client.run() now accepts a PlanWithJars which is a wrapper of a Plan and a list of jars required for the job. I removed the jar extraction/deletion logic from Client.