I can program a couple PICs I have already! I wrote a quick C# app to use the raw 2 wire mode that does it, but it needs configuration for different chips because microchip decided to use slightly different programming cycles for almost every chip model.
I looked at usbpicprog, but it has half its programming logic in the firmware and half in xml files on the pc. The firmware is the one that deals with all the different programming cycles (it's all hard coded, 1,300 line, C case/if) which is the more difficult part, the xml files only define memory ranges.
Guess one could take the prog.c from the firmware code and write all the write_pic_blah() externals it uses to use the bus pirate and see if it compiles under normal C.
Right now though, I'm thinking of using my C# app though and making config files that define the whole programming cycle along with memory ranges. That way you don't need a compiler to add a chip definition, just search up the microchip PDF for it, type up a config file and you're set.