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.
If the comparator ever returns zero for two non-identical methods, then the result of this sort will be non-deterministic (because `getDeclaredMethods()` can return the methods in any order). It would be much safer to sort the methods before passing into the comparator.