Add jobId->stage, stageId->stage mappings in JobProgressListener
Begin to sketch the interfaces for a stable, public status API.

Some design goals here:

- Hide constructors and implementations from users; only expose interfaces.
- Return only immutable objects.
- Ensure API will be usable from Java (e.g. only expose Array collections,
  since they're nicely usable from Scala and Java without having to do any
  implicit conversions on the Scala side or wrapping into Java-friendly
  types on the Java side).