Add fromLeft and fromRight convenience functions.

These are both unsafe, in that they may throw should the either value
turn out to be of the wrong type. However, it is sometimes more
convenient to use these than match expressions, particularly when using
for example nested match expressions. Compare:

  return e1.match(
      [e2](int x){
          return e2.match(
              [x](int y){ return x+y; },
              [](Left<L>){ return 0; }
          );
      },
      [](Left<L>){ return 0; }
  );

vs

  if(e1.isIndexAt<1>() && e2.isIndexAt<1>()) {
      return fromRight(e1) + fromRight(e2);
  }

  return 0;