EventuallySemigroup, etc

Draft of code for algebraic structures with multiple representations.  An EventuallySemigroup[L,R] extends Semigroup[Either[L,R]], switching dynamically from R to L (but never L to R) according to a given homomorphism.  See code comment in Eventually.scala for details.

Tests to follow.