Making sort and sort_by_key work with multidevice vectors

Also introducing vex::less<T>, vex::less_equal<T>, vex::greater<T>,
and vex::greater_equal<T> functors. Those consist of two parts:
a VexCL function called 'device' and host side operator()(T, T).
The need in this comes from the fact that vectors are partially sorted
on device and then merged on host.