pupil constrained to a surface
Check this out: 

I will circle back around to polish the build instructions, but the things that make this work is adding a shrinkwrap constraint to the location of the empty (that is being rotated in the following animation), parenting the Iris/Pupil mesh to that Empty, and adding a shrinkwrap modifier to bend to the shape of the eyeball (the trick on this one is to set a small offset, and check keep above surface).

For an extra, I added a shapekey for the pupil dialation.