Split up last mixed UI/Non UI parts in ScalaCompletionProposal

The logic that computes the text that should be inserted into the
document is now completely independent from the UI which means it is
possible to test the behavior of the code with our test suite.

The only functional change this introduces is that the method

    editor.selectAndReveal

is no longer implicitly called by

    EditorUtils.applyChangesToFileWhileKeepSelection

It is not necessary to call this method because there is no selection
kept after a code completion, only the position of the cursor needs to
be tracked, which is already done by

    EditorUtils.applyChangesToFile

Fixes #1001912
Reorganize content of ScalaCompletionProposal

- The last Non UI related stuff is moved out
- Private members are moved to the bottom of the class
- Private fields are moved to the top of the class
Refactorings in auto edit strategy test suite

The new design is more flexible and allows the addition of text
edit operations by the subclasses.
Add compiler support for text edit test suite
Add tests for completion overwrite feature
Move accessibility tests to new completion test suite

The only functional change is that the previous `normalizeCompletion`
method is no longer applied. This shouldn't be necessary because a
string representation of a completion proposal should be clearly defined
and therefore not change between Scala or scalac versions.
Move some completion test cases to new test suite

- Simplify CompilerSupport in TextEditTests. It turned out that most
  behavior is already defined in SDTTestUtils. The new implementation
  is also more correct as it turned out while implementing tests. The
  previous implementation created a ScalaSourceFile directly, but by
  doing this it is not correctly wired together with the compilation
  unit. Creating a compilation unit directly creates also a
  ScalaSourceFile implicitly which can then be used later in the test
  implementation.
- Some test cases are moved from core.completion.CompletionTests to
  core.ui.completion.StandardCompletionTests. For this move the test
  cases where simplified a little bit. They no longer check the internal
  representation of a copmletion proposal but how the completion is
  displayed to users and how the document is changed after the
  completion is applied.
Move more completion test cases to new test suite

All test cases that belong together are moved to the new test suite.
This does not include ignored tests that test behavior which is not
implemented yet. It does also not include tests that mostly test a
different part of the completion behavior. It turned out that #1001014
can be closed because it is fixed.

While writing these tests the new test suite had to be extended further
times. Nevertheless, there are still tests that can still not be
implemented with the new test suite - therefore these tests aren't moved
either.

Re #1001014
Create new parameter completion tests

At the moment all tests are still disabled and therefore the old ones
are not yet removed. This is because the behavior is only insufficient
implemented.
Apply reviewer comments

- Change `IllegalArgumentException` to `ComparisonFailure`
- Move `caretOffset` from `TextEditTests` to `Operation`
- Every test class setups a project only once instead of every time a
  new test is run. This means that the files that are automatically
  generated for each test are only removed when all tests are run.
  Therefore the test suite needs to ensure that no file with the same
  name is generated twice.
Work around race condition between presentation compiler and indexing

It could be that the Java indexer interfered a test by restarting the
presentation compiler. This happened because the new text edit test
suite creates files at runtime. This on the one sided triggered a
restart of the presentation compiler and on the other side triggered the
Java indexer, which implicitly restarts the presentation compiler too.
The problem here is that the Java indexer is scheduled too slowly, which
led to a race condition when the restart happened at the wrong time.