SortWith annotation for TestClass with default implementations

This pull request provides @SortWith annotation for TestClasses. It takes a Class as a value and uses it to sort methods within test class. It allows users to write their own implementations. Three built-in implementations are available: default, name ascending and JVM. @SrotWith replaces @FixMethodOrder annotation.

I've decided to write a new pull request like @kcooney pointed out in #998. There is another pull request with @SortWith: #882, but it went too far and it is stuck with no ongoing work. I've read all comments and I hope this implementation would be accepted.
Why did you make this an abstract class instead of an interface? Are you thinking we would add new non-abstract methods in the future?