restructured some code

- Plugins::instance() instead of factory (we're not supporting multiple
instances)
- Plugin::install() and Plugin::init() should not be overwriteable (use
_init() and _install())
- More docblocks
- Updated bundled plugin to reflect the change