Raises realistic errors if verified methods are called with incorrect arity

Reifies the `MethodReference` concept; otherwise we would have to be
passing three different parameters around to cover each possible case of
a method being implemented versus defined, as well as code to retrieve
the method object.

[Closes #393]
Address some small code review comment suggestions
Locks down visibility of methods not intended to be used elsewhere
Changes object name slightly per code review suggestion
Refactors logic a bit by introducing a `when_not_implemented` method
Changelog for #422 [ci skip]