Refactor method_visibility helper methods.
`m` is a terrible variable name.
Rename mis-named variable.

It may not be a module reference anymore.
It may be an object reference.
Use `public_method_defined?` not `method_defined?`.

It's more accurate. Also put the more common case
(public methods) first. It should be hit more
often and thus be a tiny bit faster.
Leverage our new method visibility helper methods.

Fixes #475.
Add changelog entries.