This first commit adds some of the code needed for the plugin
mechanism, but it isn't all fully operational yet. I'm merging the
branch so that I can get some other pre-requisites done quickly on the
main branch, and then plan to return to this branch.