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
Fixed vector_view on AMD CPUs

AMD OpenCL seems to really not like structs as kernel parameters.
vex::gslice and std::gslice have same semantics
Added test for 2D slicing