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.
It's not. The individual commit is [here](https://github.com/huitseeker/scala-ide/commit/976cfbc388e872c8295cc3b526df5e14b90f8ced), the line comment is [there](https://github.com/huitseeker/scala-ide/commit/976cfbc388e872c8295cc3b526df5e14b90f8ced#diff-482bb5bf81d560ea709656a9470927c1R215), and I'll add a comment per you request in the API [there](https://github.com/scala-ide/scala-ide/pull/747#discussion_r15283303).