An API for ScalaProject

Submitted early to garner comments and allow for discussion.

- I believe the members provided in the API package are the absolute maximum we should commit to supporting at the moment.
- 'Immutable' in comments has been used as
  + advice for extension
  + a substitute for a comment on thread safety
- I have branches for all the plugins:
  + [scala-search](https://github.com/huitseeker/scala-search/tree/issue/ScalaProjectAPI) (passes all tests)
  + [scala-worksheet](https://github.com/huitseeker/scala-worksheet/tree/issue/ScalaProjectAPI) (passes all tests)
  + [scalatest](https://github.com/huitseeker/scalatest-eclipse-plugin/tree/issue/ScalaProjectAPI) (fails no more tests than next-best branch)
  + [scala-ide-play2](https://github.com/huitseeker/scala-ide-play2/tree/issue/ScalaProjectAPI) (passes all tests, based on https://github.com/scala-ide/scala-ide-play2/pull/216)

This splits contributions into many commits for clarity / prereq exposure. You should expect a squash of some of the early commits before merge.
[Yes](https://github.com/scala-ide/scala-worksheet/blob/master/org.scalaide.worksheet/src/org/scalaide/worksheet/runtime/WorksheetRunner.scala#L43), there are. And as to committing to a notification semantics, nothing in this has changed the choice we have made in the past, I've just selected the implementation that's in the scala standard library rather than (as previously) rolling out our own.