Refactorings in auto edit strategy tests

The existing auto edit strategy test suites were simplified to match
the implementation in `AutoEditStrategyTests`. In the case of the
`CommentAutoEditStrategyTest` class, its test logic is completely
merged.
Adds auto indent strategy for multi line strings

To make this component possible, it was necessary to disable the
"indent on tab" action of the Java editor, which is done in the
`ScalaSourceFileEditor`.

The Java editor, it its wisdom, handled the tab key entirely by itself
and made it impossible to execute further components when this key is
pressed. Because this was special and even more weird behavior in
comparison on how other key events are handled by the Scala editor it
seemed to be the best to disable the behavior. The downside of this is
that now an additional component is required that handles the tab key.

There is another action, simply called "Indent" by the Java editor,
that handles indentation when a newline key is inserted and the
following line has to be indented. Because this behavior is buggy for
Scala code in a lot of cases it is necessary to disable this action as
well and implement a more Scala aware indentation logic. But this work
is not part of this commit.

The new features can be disabled in the editor preference page. See the
containing tests for a specification of the behavior, which not only
allows to do auto indentation inside of multi line strings but also the
automatic insertion of a stripMargin call to ease correct indentation
of multi line strings.

Fixes #1001099, #1001670, #1002063
Scala editor now considers Scala preference about indentation with tabs

Fixes #1002037, #1001727, #1002017, #1000304
Add auto indent on tab strategy

This component is needed because in a former commit the "indent on tab"
action of the Java editor has been disabled. This auto edit strategy
choses Scala preferences instead of the Java ones and is enabled
whenever the tab key is pressed.

If a user selects a text region or pressed CTRL+Tab, which decreases
the current indentation, logic of the text editor is invoked instead of
the new auto indent strategy. The text editor built-in logic is of good
enough quality, thus it is not necessary to replace it. Nevertheless,
it is not extensible, which is a problem because there are still some
cases where its behavior could be improved a little bit.

If the new line key is pressed the already existing but very erroneous
`ScalaAutoIndentStrategy` is invoked. It can't be replaced easily
because in order to insert the right indentation after a new line a
more accurate, token based, logic needs to be written, which is able to
analyse the token that surround the cursor.

This commit corrects some tests for the multi line string auto indent
strategy, whose indent logic is moved to the new indent strategy.

There is also a new preference added to the editor preferences, which
allows to disable the new indent logic. The result is that when a tab
key is pressed only a single indent step is inserted, which is either a
tab or some spaces - as specified by the Scala formatter preferences.

The only downside of the new logic I can see so far is that in a case
like

    class X {
      def f = {
    ^
      }
    }

the result is

    class X {
      def f = {
      ^
      }
    }

instead of

    class X {
      def f = {
        ^
      }
    }

which was the old and better behavior. But because one needs to hit the
tab key for this special case only two times instead of a single time,
the change shouldn't be too annoying. Having the old logic is difficult
to implement because the previous token have to be analyzed.

Even this small flaw can't deceive that the new logic is now completely
based on Scala preferences. The only exception of this is the
`ScalaAutoIndentStrategy`, which internally still reads the Java
preferences.
Add documentation about the inner workings of `DocumentCommand`
Simplify TestCommand in AutoEditStrategyTests
Make preference store in AutoEditStrategyTests execution ordering save

When the preference store is part of the companion object its state can
change between tests, thus it is moved into the abstract class.

The class TestCommand is moved to the abstract class as well, because
there is no advantage by having it in the companion object.
Make line ending check and insertion workable for Windows systems

On Windows a line ending is `\r\n` and not only `\n`.

This also fixes warnings about missing parenthesis at side-effecting
methods.
Fix bug in AutoIndentStrategy when the tab key is pressed in the first line
Merge pull request #651 from sschaef/t1001099-multi-line-string-indent

Enhance auto indent logic