[GH-5] Add an initial pass at a plugin system