Add Plugin architecture
Merge branch 'plugins'