Operator prisms

This seems pretty useful; the only reason to not do it would be to avoid incurring a dependency on `profunctors`.

In order to make it safe, I had to rejigger `HEq1` to require proofs that indices `i,j` are equal whenever we wish to say that terms `<i,M>, <j,N>` are equal in the total space of an indexed type.