Create only one instance of ScalaDocumentProvider

We need a way to access existing Scala compilation units in several
parts of the IDE. Therefore the document provider is moved to the Scala
plugin in order to act as a compilation unit cache. The Java plugin
works similar and has with the WorkingCopyManager a class that provides
such a cache, but because this class is statically configured in the
Java plugin we can't override with our own implementation.

Therefore, all calls to

    JavaPlugin.getDefault.getWorkingCopyManager.getWorkingCopyManager

need to be replaced with

    ScalaPlugin.plugin.scalaCompilationUnit

We can do these change in our own codebase, but there is the risk that
code inherited from JDT also calls accesses the working copy manager and
in these cases we have to override such implementations in order to get
the code up and running again.
Start implementing AutoEdits
Add preference page for auto edits
Add preference initializer for auto edits
Move common definitions to `SWTUtils`
Check if auto edit is enabled before it is executed
Add copy method and better apply method to `TextChange`

The apply method now creates the best fit text change object and not
only an `Replace` object.
The copy method considers forwards to this apply method to keep the
behavior.
Start implementing the `ConvertToUnicode` auto edit
Add possibility to update cursor to auto edits

This adds a new `Change` object to pass an updated cursor position from
an auto edit to the logic that applies it.

This also adds some syntax sugar for auto edits to operate on the input.

The return type of the auto edit has changed to an `Option` because it
is possible that an auto edit can not be applied. Previously the input
change object had to be returned to describe this situation but
returning an `Option` makes more sense.
Add test suite for auto edits
Add tests for `ConvertToUnicode` auto edit
Enable `ConvertToUnicode` on pasted symbols

Auto edits should be able to react on everything that is pasted into
the editor. If for example the "=>" symbol is pasted, the auto edit can
now handle such an input and convert it to its unicode counterpart.
Move auto edits to `AutoEditExtensions` companion object
Remove `TextViewer` self reference from `AutoEditExtensions`

It turned out that this dependency makes it more complicated than it
should be. The text viewer should handle all changes by itself, the auto
edit logic should just tell him what to do.
Add functionality to enable auto edits only for configured partitions
Add `lineInformationOfOffset` + tests to `Document`
Handle the case that an auto edit doesn't return a text change

If no change is returned the already existing text change needs to be
used.
Add `SmartSemicolonInsertion` auto edit

This auto edit always moves the semicolon to the end of the line unless
the cursor is inside a for comprehension - the only place in Scala where
the usage of semicolons is a syntax feature.

The "auto insert braces at corret position" feature of the Java editor
is no longer supported by the Scala editor because there are very few
cases where this feature really makes sense. Most of the time one can
use a template to generate code where the opening brace is at the
correct position.

Fixes #1002056
Implement smart backspace functionality for auto edits
Implement `toString` method for `TextDocument`