Writing panels integration

I'm working on a project where I need to get some of my custom content into Panels. Having the Panels interface to manage things is obviously a huge boon, but I wanted to do more than create Drupal blocks- I wanted the same kind of integration that modules like Views and CCK are using.

Poking around, I didn't find much information on how to actually write your own Panels integration, so after a few fits and starts, I just started from as an example and then have abstracted it here.