Add plugin system

Things that there are likely to be many of, such as benchmark types, repository types etc. should be implemented in plugins.