Refactor HasCompatibleParameterList(...) to be static

First step in moving new delegate currying-aware code to be part of shared extensions.
Extract out Delegate parameter validation to be its own method
Move HasCompatibleParameterList to be in Extensions
Simplify MethodCall code

Now that the delegate currying is in an extension method, might as well make the code similar to before to minimize the code diff.
Reverse conditional to prep for subsequent code change
Delegate lambda currying

In some versions of the Roslyn compiler, lambda backing methods can have an extra parameter to speed up CLR delegate invocations.

We use the valueDel in a few ways, sometimes the sentinel value delegate (no-op) takes in no parameters. In this case, we need to update this to use the new helper method to see if the current value in valueDel accepts no parameters (rather than literally checking to see if its backing method has zero parameters)
Make VerifySet/SetupSet aware of delegate currying.

Change a codeblock that tries to find the reflection parameter for the backing method of Action<T> by using the first parameter. In the case of curried delegates, there can be an extra parameter in front for the "logical instance". In that case, you actually can look at the last parameter instead.