These functions are very clever, but I am not sure I am comfortable with that degree of metaprogramming.  It feels like we could just as well have `validates_return` and so forth helpers ala the [Sequel `validation_helpers` code](http://sequel.rubyforge.org/rdoc/files/doc/validations_rdoc.html).

I am also curious about the runtime validation of return type: what advantage does that bring to the table, rather than applying, eg, a metaprogrammed test that validated the return type of all these matchers?

What do you think, @lutter?  Am I being overly cautious in wanting to avoid maintaining our own metaprogramming for runtime stuff?  Similar code has certainly caused trouble in the past with Puppet and other projects, so it isn't just theoretical concern, but perhaps overblown?