Functorialize the yoneda lemma

Alas, I still don't really understand the Yoneda lemma.

Also, the proof is very long.  I'd be happy if anyone could clean it up.