#115 Remove inheritance between Optics

This change is not ready yet, all the syntax (symbolic operators) part needs to be refactored.
I think especially getOption shouldn't be made final, as it is one of the most critical pain points for performance as once observed. (For example head on collections took O(n))