ENH: add initial plugin architecture