Make Identity<T> implicitly convertible to T& and const T&.

It's not entirely clear this is completely without negative
consequences, but the reasoning behind the change is that it allows
e.g. either to use much more convenient match expressions. For example:

    r = e.match(
        [](const vector<int>& v){ return doStuff(v); },
        [](const Left<string>& err){ return doOtherStuff(*err); }
    );

vs.

    r = e.match(
        [](const Right<vector<int>>& v){ return doStuff(*v); },
        [](const Left<string>& err){ return doOtherStuff(*err); }
    );

While not a lot, personal experience is that match expressions feel too
inconvenient to use a lot of the time, so any reduction in syntax must
be considered a win. Usage of `get<0>(e)` and similar might otherwise
be too tempting.

Another alternative might be to change the either alias to

    template<typename L, typename R>
    using either = sum_type<Left<L>,R>;
Add more documentation and examples to either.

In particular, usage of the simplified match expressions and their
limitations were given examples and explanation.
Change and add tests for either to reflect new match syntax.