#115 Remove inheritance between Optics

This change is not ready yet, all the syntax (symbolic operators) part needs to be refactored.
Another option to making the class abstract is taking the functions as parameters.