inclusive/exclusive scan now takes dual functor

vex::inclusive_scan() and vex::exclusive_scan() functions now take a
dual functor in the same way vex::sort() and vex::sort_by_key() do.
Added scan/sort/reduce_by_key section in README
Wrong ticks
Adding convert_<type> and as_<type> builtin functions

These are only available for OpenCL backend
Fixed a bug in documentation
Make element_index() usable in std::tie()
Sorting algorithms take tuples of keys/values

One will also has to explicitly specify the comparison function. Both
host and device variants of the comparison functor should take 2*n
arguments, where n is number of keys. First n arguments correspond to a
left set of keys, and second n arguments correspond to a right set of
keys. Here is an example that sorts values by a tuple of two keys:

    vex::vector<int>    keys1(ctx, n);
    vex::vector<float>  keys2(ctx, n);
    vex::vector<double> vals (ctx, n);

    struct {
        VEX_FUNCTION(device, bool(int, float, int, float),
                "return (prm1 == prm3) ? (prm2 < prm4) : (prm1 < prm3);"
                );
        bool operator()(int a1, float a2, int b1, float b2) const {
            return std::make_tuple(a1, a2) < std::tuple(b1, b2);
        }
    } comp;

    vex::sort_by_key(std::tie(keys1, keys2), vals);
Mentioned possibility of sorting tied keys/values in README
Update README.md