EventuallySemigroup, etc

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