Redesigned the property type to be a simple monad.

In fact, a property is a combination of state and maybe
monads. State is needed to carry test state such as random
seed. Maybe monad short circuits the test run, if one
property fails. This approach also allows to write the
properties in pretty intuitive Linq expressions. This is
how it should have been done from the start. I am pretty
happy with the result.