#115 Remove inheritance between Optics

This change is not ready yet, all the syntax (symbolic operators) part needs to be refactored.
I agree it is annoying to repeat this definition but I can't see how to solve that without inheritance. The good point is that everyone can see the implementation in all Optics.