reduce_by_key() may take several tied keys

This version also requires a device function for comparing keys.
Example:

    vex::vector<int>    ikey1(queue, n);
    vex::vector<long>   ikey2(queue, n);
    vex::vector<double> ivals(queue, n);

    vex::vector<int>    okey1;
    vex::vector<long>   okey2;
    vex::vector<double> ovals;

    VEX_FUNCTION(equal, bool(int, long, int, long),
            "return (prm1 == prm3) && (prm2 == prm4);"
            );

    VEX_FUNCTION(plus, double(double, double),
            "return prm1 + prm2;"
            );

    int unique_keys = vex::reduce_by_key(
            std::tie(ikey1, ikey2), ivals,
            std::tie(okey1, okey2), ovals,
            equal, plus
            );

    assert(okey1.size() == unique_keys);
    assert(okey2.size() == unique_keys);
    assert(ovals.size() == unique_keys);
Send to stream operator for multivectors
Reductions work with vector types
Slight change in launch configuration empirics
VEXCL_SHOW_KERNELS may be either macro or environment variable
Fixing ostream output for OpenCL vector types
reduce() may take extent_gen instances instead of gslices

This is cleaner when no slicing is necessary. Compare this:

    reduce<SUM>(slicer<2>(extents[n][m])[_], expr, 0);

with this:

    reduce<SUM>(extents[n][m], expr, 0);
typo
Make slices and permutations of tagged vectors writeable
Compute Capability filter for CUDA backend
Fixed a bug in README
Fix errors and warnings generated by Visual Studio

Visual Studio is very good at generating errors (and warnings). This
commit disables sort and reduce_by_key tests for Visual Studio because
this do not work there.
Fixed tied sort and reduce_by_key for Visual Studio

std::tuple is not a fusion sequence in Visual Studio 2010,
because std::tuple fusion adaptor uses variadic templates.
Users will have to use boost::fusion::vector_tie instead
of std::tie.
Provides meta-filters for vexcl expressions

vex::is_vector_expression<T>::value is true for vector expressions.
vex::is_multivector_expression<T>::value is true for multivector expressions.
Documentation update
Added VEX_STRINGIZE_SOURCE convenience macro

May be used to easily enquote the source code for a user-defined
function. It's advantage is that users will have benefits of syntax
highlighting and general readability of their code:

    VEX_FUNCTION(diff_cube, double(double, double),
        VEX_STRINGIZE_SOURCE(
            double d = prm1 - prm2;
            return d * d * d;
            )
        );

Got the idea from Boost.Compute (thanks, @kylelutz!)
Fixed grant number
Add a Bitdeli badge to README
Merge pull request #89 from bitdeli-chef/master

Add a Bitdeli Badge to README