Terms Lookup By Query

Add support for looking up filter terms using the results of a filter.
A filter can be used to gather a set of results and the values of the
specified field  will be extracted from each matching document and
used as a filter term.

The query lookup is cached by default to avoid redundant lookups and
the field data cache is used during lookup and document filtering to
improve performance when the number of terms is high.

There is a significant performance improvement when performing the
lookup on numeric fields or by using the BloomFilter mode which
creates a bloom filter based on terms from documents matching
the filter.  Each document matching the original query is then
checked against the BloomFilter to determine if it is a hit or not.
Add max_terms_per_shard option

Allow the user to specify the maximum number of terms to collect from
each shard.  When set the maximum number of overall terms possible will
be max_per_shard * num_shards.
Small cleanups

- add notes about being experimental in docs
- add note about being internal api in request builder
- remove unnecessary null checks
- call clearAndRelease on context
- use byte id in ResponseTerms.Type