Revert #methods type check to class level

Ensures this check will only run at class load time and not every time
the matcher is used.
Fix description for failure when predicate returns nil
Spec to ensure predicates are only called once

Also remove unnecessary memoization