Fixed reduction of temporaries on GPUs

refs #50
Allow to use temporaries in multiexpressions

refs #50

It is still not possible to create a temporary of multivector type.
That is, this is correct:

    auto tmp1 = make_temp<double, 1>( sin(x) );
    auto tmp2 = make_temp<double, 2>( cos(x) );
    mv = std::tie(tmp1 - tmp2, tmp1 + tmp2);

and this is not:

    auto tmp = make_temp<double>( tan(mv) );
    mw = tmp * tmp;

Here x is vector, and mv, mw are multivectors.