Cat API: Improve help and execute help before sending server requests

* Force the cat API classes to have simple help available by extending from a AbstractCatAction
* Use a set binder on guice creation to create the help on node start up
* Make sure that the help/field info is returned without querying any data
Allow string fields to store token counts

To use this one you send a string to a field of type 'token_count'.  This
makes the most sense with a multi-field.
Remove bash specific calls

Make sure that every call in a shell script is supported by /bin/sh and not a bashism, like $()

Closes #4314
Wrong link to Token Filter
Fix broken test.
Add support for combining fields to the FVH

The Fast Vector Highlighter can combine matches on multiple fields to
highlight a single field using `matched_fields`.  This is most
intuitive for multifields that analyze the same string in different
ways.  Example:
{
    "query": {
        "query_string": {
            "query": "content.plain:running scissors",
            "fields": ["content"]
        }
    },
    "highlight": {
        "order": "score",
        "fields": {
            "content": {
                "matched_fields": ["content", "content.plain"],
                "type" : "fvh"
            }
        }
    }
}

Closes #3750
Added test logging
The registered queries were loaded after shard went to started phase, this resulted in the situation that the percolate api could be used while the registered queries still needed to be loaded from disk.
The newly added afterIndexShardPostRecovery method to InternalIndicesLifecycle, that the percolator now uses to trigger the loading of the registered queries will make sure that a shard doesn't go to started state before the queries have been loaded.
The percolate api (like other apis) will retry the execution on a different shard copy if a shard isn't in a started state preventing empty results if there registered queries to be loaded. Percolator tests fail sometimes for this reason.
- removed the getKeyAsString method from StringTerms (redundant method)
expose key and value iterators in ImmutableOpenMap
MetaData to use new iterator in ImmutableOpenMap
Introduce abstract superclass, group cat module bindings, and short-circuit helps.
Fix implementation of currentValueHash in FieldDataSource.Bytes.SortedAndUnique.

Close #4330
Fixed parsing bug in percolator, where everything after the `doc` object was skipped.

Closes #4325