Rename `findWord` to `getWord`

The rename is necessary because methods starting with `find` should
return an `Option` and later refactorings are built upon this change.
Reformatting in `ScalaWordFinder`
Fix AIOOBE in ScalaWordFinder

The exception could occur because an arbitrary Seq can be passed to the
method findWord and not just some special wrappers that are defined in
the overloaded alternatives. Because there were also no offset checks,
the result would have been completely useless if this method would have
succeeded without an exception.

Therefore, this commit introduces offset checks and returns None if the
offset is invalid. In order to return an Option, the API of findWord
had to change. Because the word finder is used in some AspectJ code, a
new method `getWord` was introduced in a former commit, which returns
null instead of a `None`.

Another change is that findWord doesn't accept a Seq anymore, but an
IndexedSeq. Otherwise a passed linked list would result in an
inefficient implementation.

Fixes #1002238
Rename constructor parameter in ScalaPresentationCompiler

One constructor parameter in ScalaPresentationCompiler had to change
its name because it would hide the super implementation otherwise,
which can easily lead to a bug.
Clarifies findWord doc
Creates a generic preference page for syntax colouring

With some initial reorganization of code.
Cleans up ScalaSyntaxClass
Creates an API for the syntax parsing support

The API classes were split of the implementation and moved in core.lexical.
Makes RegionUtils part of the API

Moves to util.eclipse
Adds documentation
Adds/updates tests
roll back on making the output of ScalaWordFinder an Option
Merge pull request #813 from huitseeker/792-reissue

Fix ScalaWordFinder AIOOBE
Improves code scanners and partitioners doc
Merge pull request #811 from skyluc/issue/API-Syntax

Issue/api syntax
Remove the hard-coded InteractiveCompilationUnit from `ScalaHover`

The associated compilation unit may change (see #1002251) when the editor
is reused. On top of that, the structured editor in the Play plugin needs
a no-arg constructor (it’s instantiated through an extension point).

This change allows the Play plugin to use plain Scala hovers, including
all the goodies (configured font and CSS, scaladoc, etc).
Allow for dot in extension for SourceFileProvider registry.

Play templates are not just `html`, but `scala.html`. This change allows
one to declare a source file provider for them. Unfortunately, this makes
lookup linear in the number of providers, but hopefully that’s not a big
deal (so far we only have two).
A number of changes in the compilation unit APIs.

- added default implementations for a number of ICU methods. These are
  tricky aspects (like initial reconcile and scheduleReconcile) that are
  unlikely to change, and the compiler relies on a certain protocol
- added a `ScalaCompilationProblem` case class, extending the Java `IProblem`.
  This allows finer control over how errors are reported
- added the concept of a source map. This is how any compilation unit is
  translated to Scala, and provides way to translate positions back and
  forth.
- updated usages of compilation units to go through the mapping functions
- added a self-type, fixing the dispatch order for ask-methods to go again
  through `flushScheduledReloads`
- fixed the hyperlink selection region for operator names (it used to
  be according to the encoded name).
No more printlns!
Fix NPE in attached sources, and make Hovers aware of source maps.

- expanded and corrected documentation about source maps and related methods.
- removed one instance of ⇒ that made Eclipse go nuts in that file (line spacing
  was increased, see [206740](https://bugs.eclipse.org/bugs/show_bug.cgi?id=206740)
Merge pull request #812 from dragos/api/refactor-compilation-unit

Refactor the way compilation units work
Fix deadlock by moving `res.get` outside of synchronized block.

Fixed #1002275.