Implement Plugin System

Fixes #133

Depends on #135