error is O(log(n)) now
support batched transformations
Added support for random_vector<cl_double2>() in tests.
Provide implementation of cl::Local in vex namespace

cl::Local is missing in some versions of CL/cl.hpp.
Bug in README
Fixed bug in user-defined stencils on CPUs

The kernel that was generated for CPU devices worked in assumption that work
group on CPUs always contains single thread, and the assumption was not true
for quite some time already.

Thanks to Pekka Jääskeläinen from POCL project for pointing this out!
Fixing is_cl_native<char>

`char` and `cl_char` are different types (at least in gcc).
Hence, special handling for `char` is necessary.
Determining what is and what is not a vector expression terminal

This is now done by consulting a struct template `is_vector_expr_terminal<>`
rather than hard-coding terminal types into vector expression grammar.

refs #37
Generation of kernel name

Each component of a kernel name corresponding to a terminal is obtained through
call to `kernel_name<Term>::get()` function instead of hard-coding it inside
vector_name_context.

refs #37
Textual representation of vector expression

String representation of a vector expression terminal is obtained through call
to `partial_vector_expr<Term>::get()` function instead of hard-coding it inside
vector_expr_context.

refs #37
Kernel parameter declaration

Kernel parameters for each of expression terminals are declared through
call to `kernel_param_declaration<>::get()` instead of hard-coding them
inside `declare_expression_parameter` struct.

refs #37
Setting kernel arguments

Kernel arguments for each terminal are set through call to
`kernel_arg_setter<Term>::set()` function, instead of hard-coding them inside
`set_expression_argument` struct.

refs #37
Fixing unused parameter warnings
Temporary returning type_name<elem_index>() overload
Allow to provide custom preamble for a terminal

refs #37
WIP: Adding vector_view terminal

This allows to create generalized slice of a vector (sminlar to
std::gslice) and uses refactored vector expression template engine.
Some interface changes and wrapper functions are coming.

refs #31, #37
Finished work on generalized slice

Generalised slice interface is copied from std::gslice and allows to
create views to multidimensional data stored in 1D vector.
Slice may be used as:

    vex::vector<double> x(ctx, 2 * n);
    vex::vector<double> y(ctx, n);

    cl_ulong size   = n;
    cl_ulong stride = 2;

    vex::gslice<1> slice(0, &size, &stride);

    y = slice(x); // Put every even element from x into y.

Only single-device contexts are supported. Views are currently
read-only.

@neapel, @d-meiser: this may in principle be used as a basis for
multi_array slicing.

refs #31, #37
Moved arg setting to slice class
Fixed assignment of element_index to multivector

This was broken by expression engine refactoring.
CMake option for showing generated kernels