Plugin dependencies, ordering, and metadata.

1. Move plugin loading into a separate module.
2. Separate loading, sorting, and initializing steps.0
3. Plugins may now be an object with metadata and an `init` method.
4. Plugins state dependencies through requires, before, after, and phase properties.
5. Plugins will be re-ordered at load time to satisfy ordering metadata.