To expand on why I think it's dodgy: the private methods in stats.distributions are all defined with the actual shapes they take, not with ``*args``. While this is not written down explicitly, it is expected and makes sense. Any intelligence for ``*args`` should be in the public methods.

We should figure out what the allowed ways of subclassing are and document/test those. Now it's impossible to know what breaks in user code for non-trivial changes to the framework. I guess it should be done before merging this PR.