[SPARK-3250] Implement Gap Sampling optimization for random sampling

More efficient sampling, based on Gap Sampling optimization:
http://erikerlandson.github.io/blog/2014/09/11/faster-random-samples-with-gap-sampling/

This is the main style issue with this update. In Spark, we use the following style:
~~~
items.filter { item =>
  ...
}
~~~

Please update other places as well.