Save actions

This is not yet completely finished but because I already used it in production and it worked great so far I want to give you the possibility to play with it around as early as possible. In the following a short overview about what is included in this PR.

Features included:

- Java save actions do no longer work for Scala editors
- Instead there are even better Scala save actions. They look like this:
![sa-code](https://cloud.githubusercontent.com/assets/488530/3910926/763e033c-231c-11e4-9770-8703388e9799.png)

- A preference page in `Scala → Editor → Save actions` where the save actions can be enabled/disabled:
![sa-pref](https://cloud.githubusercontent.com/assets/488530/3910930/7c5b10d4-231c-11e4-8b39-4184373b7e73.png)

- A timeout for save actions (can be configured in the preferences). This timeout keeps the editor responsive but can't abort the computation of the save action (in the worst case it means that a non returning save action will run until termination of Eclipse in a background thread)
- Document driven (fast) and compiler driven (slow) save actions. The former usually operates in ~1-10ms, the latter more in ~50-timeout ms.

Design overview:

- Package `org.scalaide.extensions` contains new API+save actions
- Package `org.scalaide.core.text` also contains new API
- Package `org.scalaide.core.internal.{text,extensions}` contains implementations of the API
- Package `org.scalaide.ui.internal.editor` contains additions needed for save actions.
- A new save action needs to be a `trait X extends SaveAction with {CompilerSupport,DocumentSupport}`
- The save action needs to be enabled in `SaveActionExtensions.saveActionSettings` and in one of `SaveActionExtensions#{applyDocumentExtensions,applyCompilerExtensions}`

Drawbacks/TODOs:

- [ ] The introduction of `ScalaDocumentProvider` broke several things
   - [x] Implicit highlighting (`SemanticHighlightingReconciliation`)
   - [x] Semantic highlighting extensions (participants)
   - [x] Toggle breakpoint (in `ScalaToggleBreakpointAdapter`)
   - [x] `BaseSemanticAction.refresh`
   - [x] All other things, which call `JavaPlugin.getDefault.getWorkingCopyManager.getWorkingCopy`
   - [ ] Quick fixes are not shown anymore
   - [x] Diff viewer (for Scala files)
   - [x] `EditorUtility.openInEditor` creates `InternalClassFileEditorInput`, whose `getAdapter` method is broken → it needs to a `ScalaClassFile`.
- [x] compiler accesses are not yet wrapped in askOption calls
- [ ] API is not yet finished
- [x] No tests for the save actions yet
- [ ] Save action preference page preview
- [ ] Resource leak when a save action never returns. I see possibilities to "reactify" the save action API because most functionality is hidden to users. But it is not yet implemented.
- [x] Bugs in `AddMissingOverride`:
   - [x] [1002221](https://www.assembla.com/spaces/scala-ide/tickets/1002221#/activity/ticket:)
   - [x] [1002225](https://www.assembla.com/spaces/scala-ide/tickets/1002225#/activity/ticket:)
   - [x] [1002227](https://www.assembla.com/spaces/scala-ide/tickets/1002227#/activity/ticket:)
   - [x] [1002234](https://www.assembla.com/spaces/scala-ide/tickets/1002234#/activity/ticket:)
   - [x] [1002239](https://www.assembla.com/spaces/scala-ide/tickets/1002239#/activity/ticket:)
   - [x] [1002240](https://www.assembla.com/spaces/scala-ide/tickets/1002240#/activity/ticket:)
- [x] Don't create save action when it is not enabled
- [ ] Bugs in `AddReturnTypeToPublicSymbols`:
   - [x] [1002232](https://www.assembla.com/spaces/scala-ide/tickets/1002232#/activity/ticket:)
   - [x] [1002233](https://www.assembla.com/spaces/scala-ide/tickets/1002233#/activity/ticket:)
   - [x] [1002267](https://www.assembla.com/spaces/scala-ide/tickets/1002267#/activity/ticket:)
   - [x] [1002268](https://www.assembla.com/spaces/scala-ide/tickets/1002268#/activity/ticket:)
   - [ ] [1002277](https://www.assembla.com/spaces/scala-ide/tickets/1002277#/activity/ticket:)
   - [ ] [1002278](https://www.assembla.com/spaces/scala-ide/tickets/1002278#/activity/ticket:)
   - [ ] [1002282](https://www.assembla.com/spaces/scala-ide/tickets/1002282#/activity/ticket:)
- [ ] Update docs: https://github.com/scala-ide/docs/pull/99#issuecomment-55648107
- [ ] missing features
   - [ ] [1002222](https://www.assembla.com/spaces/scala-ide/tickets/1002222#/activity/ticket:)
   - [ ] [1002276](https://www.assembla.com/spaces/scala-ide/tickets/1002276#/activity/ticket:)
Why not make it a parameter to `perform` then? It seems weird to have them injected this way.