Smallcheck monadic

This PR introduces a simple way to run a smallcheck tests that are based on a user monad.

Proposed API is not great so I'm open to suggestions.