Treat empty prefrence as a `not set` in Plain Operation Routing

An empty preference was causing a AIOOB exception in
PlainOperationRouting. We now check for `null` or `empty` instead of
just `null`

Closes #3591
Prevent allocation algorithm from prematurely exiting balance operations

In a special case if allocations from the "heaviest" to the "lighter" nodes is not possible
due to some allocation decider restrictions like zone awareness. if one zone has for instance
less nodes than another zone so one zone is horribly overloaded from a balanced perspective but we
can't move to the "lighter" shards since otherwise the zone would go over capacity.

Closes #3580
Migrated documentation into the main repo
Fixed a typo in the config of light finnish stemmer (old last_finish is still supported for backward compatibility)

Closes #3594
Fixed typo
Use a separate build directory for Eclipse.

The fact that Maven and Eclipse share the same build directories can trigger
race conditions when both are trying to build at the same time, eg. if you run
`mvn clean test` while Eclipse is up and running: Eclipse will notice that some
class files are missing and start compiling in parallel with Maven.
Make sure 2 writes happened, so we can check if 2 deletes happen that have been triggered by ttl
Ignore AlreadyExpiredException exception during when indexing a document on a replica.
The document should just be indexed to stay consistent with the primary shard.
Convert relative paths to URI first in tests to prevent URL encoded paths

If a path to the test classes contains spaces Hunspell tests failed due
to URL encoded paths. This happens on CI builds if you give the build
a name containing a space. This is fixed by first converting to a URI
and created a File object from the URI directly.
Added logging and asserts to make it easier to understand potential failures
Logging shard level multi percolate errors under debug rather than trace
Removed unnecessary catch clause.
Improved logging
Recheck cutoffScore during phrase_suggest merge.

The goal is to throw out suggestions that only meet the cutoff in some
shards.  This will happen if your input phrase is only contained in a
few shards.  If your shards are unbanced this rechecking can throw out
good suggestions.

Closes #3547.
Force default codec in tests where we rely on the latest lucene defaults
Execute listeners on current thread if threadpool is shutting down