#115 Remove inheritance between Optics

This change is not ready yet, all the syntax (symbolic operators) part needs to be refactored.
Actually it isn't an option because the functions need quantification and normal function values in Scala don't support that.