RFC: Use pecan

This is a little large and not quite ready - I still need to do some cleanup and probably more testing. I'm putting it up here for initial review, though.

I think I did something wrong with a rebase and that's how 1c2389b ended up here.