moving global filters to options

The rabbit hole went pretty deep on this one, I found a small bug and some untested code that needed some love.

The bug is that when the controller is a filter, it's treated as having the default order of `0` instead of `int32.MaxInt` which it's supposed to have. Added some tests for `DefaultFilterProvider`.

I also added a minimal functional test for showing the order in which filters appear in on the descriptor. This area needs more tests for filters actually executing, but this PR is big enough.
You can avoid having the private setter if you declare it inline