Move plan checking from PactProgram to Client

Client would invoke PactProgram.checkPlan(), but this is the only place
where this was done, so I moved it.

This is in preparation of further cleanups and a slight refactoring of
PactProgram.
Change Client to accept new PlanWithJars instead of PactProgram

PlanWithJars is a simple wrapper around a Plan and a list of jars that
have to be submitted with the plan. This is necessary to enable the
RemoteExecutor that simple accepts a Plan and a list of jars without the
whole PlanAssembler and jar extraction business of PactProgram.

PactProgram now has a getPlanWithJars() method that does the old jar
extraction and simply creates the PlanWithJars wrapper with the plan
that it created from the PlanAssembler in the jar. Client no longer
cares about the jar extraction logic and does also no longer call
deleteExtractedLibraries (since it does not have a reference to the
PactProgram anymore). The code that creates the PactProgram is not
responsible for calling deleteExtractedLibraries after the job is
submitted.
Change Client to return job runtime if called with wait=true
Add PlanExecutor interface and RemoteExecutor

LocalExecutor now implements PlanExecutor and RemoteExecutor can be used
to submit jobs to a cluster.

Example usage added to the WordCount example.