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.
This looks pretty neat, but I'd like to suggest a few (general) things:

* split this file in several files. It doesn't have to be one class per file, but a bit more fine-grained. For example, `ScalaInstallation` and `ScalaModule` could be in a separate file, events + ScalaProject could be together too.
* use `()` in parameter lists only if the method is side-effecting. Pure getters should have no parameter list at all
* try to clean up getter names. I prefer not to have `get` as a prefix (too Java-like), but there might be some cases where this is necessary. I just thought I'd mention it. These [conventions](http://docs.scala-lang.org/style/naming-conventions.html) are a good starting point.