Improved type inference for Simple optic construction [PR]

I must've forgotten to submit this as a pull-request.

Changes suggested in #91 are applied.
If you already create named classes for this task, maybe you should name them corresponding to the optic being created?