implement plugin architecture, major refactoring

This is the second alpha release, and since I feel like now the code is
"full" enough, I plan to from now on do normal commits with appropriate
messages instead of grouping them all together in giant changes like
this. In this release:

- Plugin architecture implemented
- FM functionality refactored into a plugin
- Several plugins added
- Changes in Main to support plugins
- Clean up and general refactoring
- Probably tons of other stuff I'm forgetting about