Fix makePrism behavior in singleton case

Previously makePrism would generate a different
prism for a constructor depending on whether there
was more than one constructor or not. This included
both an incompatible type and incompatible name.

The commit adds a flag during lens generation "backwardIso"
to determine when the field type should be the "outer" type.
This flag is enabled as part of makeIso and disabled as part
of makeLenses and makePrism by default.

Fixes #387