Remove lazy return type from evaluation rules.

In the beginning, evaluation rules where patterned on the lazy return
type. So there would be rules like

template<>
struct evaluation<mpz_expression<plus, make_tuple<const mpz&, const mpz&>::type>
{ ... };

It turns out that this does not work in general, since in order to to
pattern on the data, one has to instantiate this lazy return type, which
can lead to infinite recursion.

So I added Operation and Data to the template, now making the rule look like

template<>
struct evaluation<
    mpz_expression<plus, make_tuple<const mpz&, const mpz&>::type,
    plus,
    make_tuple<const mpz&, const mpz&>::type> { ... };

But the first template parameter is now not only redundant but actually
undesirable. Namely, in order to find out the return type of an
expression (like a + b), which is determined by the evaluation rule, one
first has to construct the lazy return type -- catch 22!

So this commit removes the first template parameter.