Core: switch to Lucene QueryRescorer

Simon started this with #6232 and I just simplified it a bit ...

One functional change I did was: if a first pass hit did not "participate" in rescoring (because it wasn't in the top window hits), I multiply its score by rescore.queryWeight() matching what we do when it did participate but the 2nd pass query didn't match it.  I'm not sure that's "correct" but I think it's "more correct" than just using the raw first pass score ...
> Maybe we should ensure that the original query weight is greater than 1 and that the rescore weight is greater than 0, so that rescoring can only increase scores? The fact that non-rescored hits could have higher scores than rescored hits feels wrong to me.

I agree it's odd if rescoring can make the score worse ... but it's not just the default (ScoreMode.Total) that can do this.  With ScoreMode.Min and .Multiply you could also see the score decrease.  I suppose we could set the new score to be max(old score, new score) to force it to only increase, but this seems hacky/dangerous ... what if there are real use cases for allowing rescorer to penalize ...

So I don't think we should enforce rescore weight > 0, nor similar checks for the .Min/.Multiply cases, at least not on this issue ;)

> I wish this is something elasticsearch could take care of by itself, so that
> 
> * given a fixed window_size you would have exactly the same hits with the same scores and at the same position, no matter what your from and size are (this way over-requesting up-front would just be an optimization, not the normal procedure)

We have this now for "from" anyway (as long as caller does not change window_size), but if caller changes size, because of the "new score might be lower than old score" issue, results could shift ...

That said, for the "common" usage here, where rescore weight > 0, and you use Total (not Min or Mutiply), such that new score is always >= old score, then you can also vary size without changing top hits.

I'll soften the admonition in the docs to just warn about keeping window_size fixed ...

> * you could request pages that are beyong window_size

You can do this today too, just by pre-specifying a large size up front.