[SPARK-2082] stratified sampling in PairRDDFunctions that guarantees exact sample size

Implemented stratified sampling that guarantees exact sample size using ScaRSR with two passes over the RDD for sampling without replacement and three passes for sampling with replacement.
This is not a stratum but something like an `AcceptanceSummary` or `AcceptanceResult`.

The implementation could be simplified:

1) replace `private val _waitlist` and `def waitlist` by `val waitlist`
2) define `var acceptBound` and initialize it to `Double.NaN` to avoid possibly boxing/unboxing. Same for `waitlistBound`.
3) `this.incrNumItems(num)` can be replaced by `this.numItems += num`, which should be concise and sufficient. Same for `incrNumAccepted` and `addToWaitList`.