Provider priority

This allows providers to specify whether what they provide is low, medium or high priority.

This makes it possible for 3rd parties to override the default strategy aliases in non-deterministic situations, such as when they are loaded via the ServiceLoader.

There can still be conflicts within the priority levels, but they should not be rare, as it would mean that the application has two 3rd party processors that do the same thing on its classpath.