[GEO] Fix for ArithmeticException[/ by zero] when parsing a "polygon" with one pair of coordinates

While this commit is primariy a fix for issue/8433 it adds more rigor to ShapeBuilder for parsing against the GeoJSON specification. Specifically, this adds LinearRing and LineString validity checks as defined in http://geojson.org/geojson-spec.html to ensure valid polygons are specified. The benefit of this fix is to provide a gate check at parse time to avoid any further processing if an invalid GeoJSON is provided.  More parse checks like these will be necessary going forward to ensure full compliance with the GeoJSON specification.

Closes #8433
Correcting coordinate checks on LinearRing and LineString, updating test
Adding parse gates for valid GeoJSON coordinates. Includes unit tests.
Updating to throw IllegalArgument exception for null value coordinates. Tests included.
Core: In the bitset cache only eagerly load bitsets for parent nested object fields.

Don't eagerly cache parent type filters in bitset cache or nested object fields that are leafs.
Also let parent/child queries not rely on FixedBitSetFilter, but rather on regular Filter

Closes #8440
Aggregations: Changed child filters to not require a random access based bitset in `nested` agg.
Also the nested agg now requires docs to be consumed / scored in order.

Closes #8454
Percolator: Remove `index.percolator.allow_unmapped_fields` setting.

There should be no option to opt out from strict field resolution for percolator query parsing.

Closes #8439
Logging: BroadcastOperationAction - added trace logging for successful shard-level responses

In order to be able to trace the exact shards that participated in the operation.
[CORE] Intorduce shards level locks to prevent concurrent shard modifications

Today it's possible that the data directory for a single shard is used by more than on
IndexShard->Store instances. While one shard is already closed but has a concurrent recovery
running and a new shard is creating it's engine files can conflict and data can potentially
be lost. We also remove shards data without checking if there are still users of the files
or if files are still open which can cause pending writes / flushes or the delete operation
to fail. If the latter is the case the index might be treated as a dangeling index and is brought
back to life at a later point in time.

This commit introduces a shard level lock that prevents modifications to the shard data
while it's still in use. Locks are created per shard and maintined in NodeEnvironment.java.
In contrast to most java concurrency primitives those locks are not reentrant.

This commit also adds infrastructure that checks if all shard locks are released after tests.
Fix synchronization - leftover from refactoring
[TEST] Close node env otherwise windows can't delete tmp files
Prevent double wrapping directories in MockDirectoryWrapper
Test: CorruptedFileTest.testCorruptionOnNetworkLayer used node settings when creating an index

Test used `indices.recovery.concurrent_streams` when creating an index but this is a node setting. Moved it to the node settings and added similar settings to speed up concurrent recoveries.

Also fixed a misleading log message in ShardRecoveryHandler when logging a remove corruption
Test: Let the random parent/child tests use the query and filter parsers instead of creating the queries and filters in a custom way.

By using the query and filter parsers we increase the test coverage and make the random parent/child tests simpler.
Docs: Add Wireshark protocol dissection support

Hi guys, I've finished my Wireshark dissector for Elasticsearch. It is now merged into their master. See https://code.wireshark.org/review/#/c/4948/

Closes #8495
Search: Do not force the post-filter to be loaded into a BitSet.

Close #8488
Docs: Fix typo in the javadoc for #tieBreaker()

Closes #8503
fix of Bulk update child doc, NPE error message when parent is not specified #8365
  - Throw an RoutingMissingException instead of NPE
Bulk indexing issue - missing parent routing causes NullPointerException.
Now each error is reported in bulk response rather than causing entire bulk to fail.
Added a Junit test but the use of TransportClient means the error is manifested differently to a REST based request - instead of a NullPointer the whole of the bulk request failed with a RoutingMissingException. Changed TransportBulkAction to catch this exception and treat it the same as the existing logic for a ElasticsearchParseException - the individual bulk request items are flagged and reported individually rather than failing the whole bulk request.

Closes #8365
Snapshot/Restore: restore of indices that are only partially available in the cluster

Fixes the issue with restoring of an index that had only some of its primary shards allocated before it was closed.

Fixes #8224