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.
Yes it is boiler plate code but it is fine to have boiler plate in a library in order to remove boiler plate for your user. In that case, it reduces type annotation at call side. 
I think we should still offer the 2 apply functions, one simple with 2 type parameters, one boiler platty with a single one. I agree it requires some comment