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 ...
To give more context, the reason why I'm thinking about this is to make sure that you always get the same scores for the same documents, no matter the page size.

For the same reason I think another bug is that rescoring should take into account the offset (it doesn't seem to)?