adding drop(), dropWhile(), take(), takeWhile() and slice()
adding flatten(), flatMap(), union(), difference() and without()
adding partition(), removing takeWhile() and dropWhile()
adding another partition() test