Terms Filter Lookup: Failure when no mappings for the terms field exists (no data indexed)
closes #3216
improve geohash_filter to use terms filter
and various other cleanups
Fix NumericTokenizer.

NumericTokenizer is a simple wrapper aroung a NumericTokenStream. However, its
implementations had a few issues: its reset() method was not idempotent,
causing exceptions if reset() was called twice (causing #3211) and it had no
attributes, meaning that the only thing it allowed to do is counting the number
of generated tokens. The reason why indexing numeric data worked is that
the mapper's parseCreateField directly generates a NumericTokenStream and
by-passes the analyzer.

This commit makes NumericTokenizer.reset idempotent and makes consuming a
NumericTokenizer behave the same way as consuming the underlying
NumericTokenStream.
Lookup Terms Filter _cache parameter not being taken into account
fixes #3219
better handling of null filters when caching them
Reduced geobulk data
only call terms lookup once and not per segment
Added Arabic/PersianNormalizationFilters from Lucene
properly set the set flag
Deleting or closing an index doesn't clean the memory properly
fixes #3232
Lookup Terms Filter ignores the routing parameter
fixes #3233
The `geohash_cell` filter now adapts the format of other geo-filters. The oject fieldnames match the fieldnames document names automatically. This invalidates the `field` field in previeous versions. The value these fields value is a `geo_point` value (all formats supported) which is internally translated to a geohash. Since those points alway have a maximum precision (level 12) a `precision` definition has been included. This precision can either be defined as *length* of the geohash-string or as *distance*. It's assumed the a distance without any unit is a geohash-length.

```
GET 'http://127.0.0.1:9200/locations/_search?pretty=true' -d '{
    "query": {
        "match_all":{}
    },
    "filter": {
        "geohash_cell": {
			"pin": {
				"lat": 13.4080,
				"lon": 52.5186
			},
            "precision": 3,
            "neighbors": true
        }
    }
}'
```
Closes #3229
Made the minimum score only active when executing the main query and not during the context rewrite phase.

This fixes parent/child queries when using minimum_score.

Closes #3203
A small doc change to reflect StreamOutput.writeVInt() does support negative numbers but not efficiently. StreamOutput.writeVLong & StreamInput.readVLong really support it.

This is to better describe the current situation. We probably want to normalize these methods and potentially add optimization/support for -1 values.