Port Comma.ProjectionFunctors from catdb

This is on top of #269.  It's necessary for constructing Kan extensions pointwise.
Unfortunately, it's really, really slow (it's now the slowest file in the library, by almost a factor of four).  I'd appreciate help in speeding it up, though I'm also happy to have it merged as-is.  (I'm a bit worried about Travis timing out on this file, though...)