Nth element

Added benchmark, modified the tests and implemented a selection algorithm. ~5x improvement...
oh yeah, `nth_element()` doesn't specify the order of the entire range. we should probably just check the n'th value explicitly and then use something like `is_partitioned(vector.begin(), vector.begin() + 5, _1 <= 9, queue)`. also it would probably be good to add the two test cases show in the example for [`std::nth_element()`]( http://en.cppreference.com/w/cpp/algorithm/nth_element).