Moved Plugin to its own package
Plugin system is now type-indifferent via generics