Basic property tester

This is a very simple system for testing properties using randomly generated
data like Haskell's QuickCheck does. It doesn't yet provide many helpers to make
data generation easier.

This is a large patch which adds a whole new feature and some of the code (*cough* formatter *cough*) is not quite pretty, so please feel free to shoot at it.