Implement support for plugin hard dependencies.

Hard dependencies are specified in the plugin.yml:

```
depends:
- plugin1
- plugin2
```

Dependencies are guaranteed to be enabled before the dependents. Dependents will not be enabled if any of the dependencies are not enabled. This will also catch circular dependency errors.