Remove getter-style names and "consistent snapshot" semantics:

- Java-style getX() method naming doesn't make sense for immutable
  objects that will never have any setters.
- The "consistent snapshot of the entire job -> stage -> task mapping"
  semantics might be very expensive to implement for large jobs, so I've
  decided to remove chaining between SparkJobInfo and SparkStageInfo
  interfaces.  Concretely, this means that you can't write something like

     job.stages()(0).name

  to get the name of the first stage in a job.  Instead, you have to explicitly
  get the stage's ID from the job and then look up that stage using
  sc.getStageInfo().  This isn't to say that we can't implement methods like
  "getNumActiveStages" that reflect consistent state; the goal is mainly to
  avoid spending lots of time / memory to construct huge object graphs.
Add note explaining that interfaces should not be implemented outside of Spark.
Add getJobIdsForGroup() and num*Tasks() methods.
Add example of basic progress reporting in Java.

This is a very rough WIP example; things should
be considerably simpler once I port AsyncRDDActions to Java.