Refactor RDD sampling and add randomSplit to RDD

Replace SampledRDD by IndependentlySampledRDD, which accepts an IndepentRandomSampler instance as input. The current sample with/without replacement can be easily integrated via BernoulliSampler and PoissonSampler. The benefits are:

1) RDD.randomSplit is implemented in the same way, related to https://github.com/apache/incubator-spark/pull/448
2) Stratified sampling and importance sampling can be implemented in the same manner as well.

Unit tests included for samplers and RDD.randomSplit.

My first Scala patch. Need advice on Scala coding styles and best practice.