significant terms: add scriptable significance heuristic

This commit adds scripting capability to significant_terms.
Custom heuristics can be implemented with a script that provides
parameters subset_freq, superset_freq,subset_size, superset_size.

Script heuristic and results have to be serialized. When deserializing the ScriptService is not available and the new score cannot be computed immediately after reading the result.
Therefore, instead of re-computing the score the score is serialized with each bucket. 
For the reduce phase the script is initialized before buckets are reduced (https://github.com/brwe/elasticsearch/compare/elasticsearch:master...brwe:significant-terms-scripting?expand=1#diff-ba5a615f489137f2b16d37bc54dd3f8dR174) which seems a little clumsy to me. Happy for any suggestion.
it might be useful to wrap this holder objects which can turn this into simple assignements ie:

```Java

public final class LongAccessor extends Number {
   public long value;
   public int intValue() {
      return value;
   }
   ....
}

// you do once in the ctor
this.subSetSizeHolder = new LongHolder()
script.setNextVar(""_subset_size");

// in getScore(...) you do
subSetSizeHolder.value = subsetSize

```
I thinks this should be much faster than these map updates on each score call?