Generalized lenses and changed isos to pairs of lenses

This also drops the dependency on `profunctors`