Added SAXPY test to benchmark
Merge pull request #56 from roystgnr/saxpy

Added SAXPY test to benchmark
Fix return type deduction for reduced vector view
Test for nested reduced views

Also fixed preamble generation for reduced vector views (preamble was
not created for the child expression).
Specify optional expression size in element_index

This allows to reduce vectorless expressions (see monte_carlo_pi in
tests/random.cpp for an example.
Added random number generation benchmark

@neapel: this is what I get on my Tesla K20c vs Intel Core i7 920:

Random numbers per second (double)
    OpenCL (threefry): 8.2402e+09
    OpenCL (philox):   1.08526e+10
    C++    (mt19937):  8.97945e+07

Random numbers per second (float)
    OpenCL (threefry): 1.11026e+10
    OpenCL (philox):   1.23625e+10
    C++    (mt19937):  1.76744e+08
Added missing builtin functions
Simplify definition of new terminals

Kernel generation driver functions now differentiate between terminals
that are values and terminals that have values (vector<T> is both a
terminal and a value, but proto::terminal<int> is a terminal that holds
a value).

Helper functions for kernel generation are now called with appropriate
arguments (either terminal itself, or proto::value(terminal).
Replaced tabs with spaces
Use of integral constants in vector expressions

An expression like

    x = 42;

will result in a kernel that will take a global pointer (x) and an int
(42) as parameters. The second parameters may be optimized away by
explicitly telling VexCL that 42 is constant:

    x = std::integral_constant<int, 42>();
Adopt constants from boost::math::constants

vex::constants namespace contains constants from boost::math::constants.
An example:

    x = sin( vex::constants::two_pi() * vex::element_index() );

two_pi() constant won't be passed as kernel parameter, but will be a
literal constant in kernel source.
Merged v1.48 and v1.50 parts of constants.hpp

Constants will not work with Boost before v1.50 anyway.
Convert boost::constants to double before dumping to source

Some of OpenCL implementations do not deal well with literals with too
many digits.
Reimplemented vex::constants

VEX_CONSTANT macro is similar to VEX_FUNCTION: it takes constant name
and constant value (any value that may be sent to ostream).

The implementation does not depend on boost::math::constants internals,
and is not even restricted to boost::math::constants: any value (or even
valid OpenCL expression) can be turned into a vexcl constant.
Fixed a comment
Split local and global scope constants

Made VEX_CONSTANT return a functor. This makes it suitable for
definition in local scope. Predefined constants are defined (with
VEX_GLOBAL_CONSTANT)as inline functions which makes them safe for
inclusion into several object modules.
typo
Use fully-qualified names in VEX_GLOBAL_CONSTANT
Update README.md
Aloow decrementing for vector iterators