Terms Lookup By Query

Add support for looking up filter terms using the results of a query.
A query or filter can be used to gather a set of results and the
specified "path" field value 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 since we don't use BytesRef's avoiding the
costly conversion of the numeric value to a string and copying the
resulting bytes into the BytesRef.
Optimizations

- track total terms size and init with capacity + load factor to
prevent rehashing

- calculate hashcode as terms are added
Updated to work with new fielddata changes
Add initial BloomFilter support.

Add support for populating a bloom filter and using
that to perform the lookup.  Each shard populates it's own
bloom filter using the terms found in the lookup query.  The
FieldDataResponseTermsFilter then checks each document against
the bloom filters to determine if a doc is accepted or not.