Given an Optic, a function from A to B, and a "larger" value S,
produce a T by retrieving the A from the S, applying the function, and
updating the S with the B resulting from the function.
The inverse of Over: given an Iso, a function from T to S, and a "smaller"
value B, return a "smaller" value A by traversing around the type ring (B -> T
-> S -> A).