Remove duplicated code.

Instead of implementing matches? and error separately, define matches?
in terms of error: anything that produces no error must match.
Add a test for :list schema
Fix :list clause in error multimethod