implement mapEitherWithKey

I accidentally introduced some pointless commits; let me know if it's a problem.

I tried to implement `mapMaybeWithKey` in terms of `mapEitherWithKey` but it was twice as slow - maybe there's a clever way.